using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;namespace PictureShow.PicturePackage
{
    public class PicturePackageXml
    {
        private string name;     //图片名称
        private int pictureID;   //图片的编号
        private int segmentNumber;  //图片的块编号
        private int segmentTotal;  //图片分割后的总块数
        private int segmentSize;   //图片块的大小
        private byte[] buffer;  //图片块的数据
        public string Name {
          get { return name; }
        }        public int PictureID {
            get { return pictureID; }
        }
        public int SegmentNumber {
            get { return segmentNumber; }
        }        public int SegmentTotal{
            get { return segmentTotal; }
        }        public int SegmentSize {
            get { return segmentSize; }
        }        public byte[] Buffer {
            get { return buffer; }
        }
         
        public PicturePackageXml(string name, int pictureID, int segmentNumber, int segmentTotal,  int segmentSize,byte[] bufferData) {
             this.name = name;
             this.pictureID = pictureID;
             this.segmentNumber = segmentNumber;
             this.segmentTotal = segmentTotal;
             this.segmentSize = segmentSize;
             this.buffer = bufferData;
        }
}using System;
using System.Collections.Generic;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Diagnostics;namespace PictureShow.PicturePackage
{
    public class PicturePackages
    {
        public PicturePackages() { }
        /// <summary>
        /// 对图片进行分割
        /// </summary>
        /// <param name="sementSize">每个块的大小</param>
        /// <param name="suffix">文件后缀名</param>
        public PicturePackageXml[] SplitPicture(string name, int id, Image image, int sementSize,
                                             int suffix) {
            MemoryStream ms = new MemoryStream();            //switch(suffix) {  //根据文件后缀名suffix,生成 *.Bmp、*.Gif、*.Jpeg格式的图片
            //    case 0:
                    image.Save(ms,ImageFormat.Bmp);
                    //break;
            //    case 1:
            //        image.Save(ms, ImageFormat.Gif);
            //        break;
            //    default:
            //        image.Save(ms, ImageFormat.Jpeg);
            //        break;
            //}            int segmentTotal = (int)ms.Position / sementSize+1;  //按输入的字节计算改图片分割成的块数
            Trace.WriteLine(ms.Position.ToString());
            Trace.WriteLine(segmentTotal.ToString());
            PicturePackageXml[] picturePages = new PicturePackageXml[segmentTotal];            int sourceIndex = 0;
            int bytesCopyTo;
            for(int i=0;i<segmentTotal;i++) {
                bytesCopyTo = (int)ms.Position - sourceIndex;                if (bytesCopyTo > sementSize) {
                    bytesCopyTo = sementSize;
                }
                    byte[] bufferSegment = new byte[bytesCopyTo];                    Array.Copy(ms.GetBuffer(), sourceIndex, bufferSegment, 0, bytesCopyTo);                    picturePages[i] = new PicturePackageXml(name, id, i, segmentTotal, bytesCopyTo, bufferSegment);                    sourceIndex += bytesCopyTo; 
            }
 
          return picturePages;
        }        /// <summary>
        /// 图片合并还原
        /// </summary>
        /// <param name="picturePackages">图片块数组</param>
        public Image UnitePicture(PicturePackageXml[] picturePackages) {
            int fullPictureSize=0;  //图片原始大小
            int pctureID = picturePackages[0].PictureID;
            int segmentTotal = picturePackages[0].SegmentTotal;            foreach(PicturePackageXml picturePackage in picturePackages) {
                fullPictureSize =fullPictureSize+ picturePackage.SegmentSize; 
            }            Console.WriteLine(fullPictureSize.ToString());
               byte[] pictureBuffer=new byte[fullPictureSize];
               int distenation=0;               for(int i=0;i<segmentTotal;i++) {
                  int length = picturePackages[i].Buffer.Length;
                  ////int length = picturePackages[i].SegmentBuffer.Length;
                  ////Array.Copy(picturePackages[i].SegmentBuffer, 0, buffer, distenation, length);
                  ////distenation += length;                  Array.Copy(picturePackages[i].Buffer, 0, pictureBuffer, distenation, length);
                  distenation += length;
                  Console.Write(distenation.ToString() + " ");
                  Console.WriteLine(pictureBuffer.Length.ToString());
               }               MemoryStream ms = new MemoryStream(pictureBuffer);//,0,pictureBuffer.Length);
     
              Image image = Image.FromStream(ms);             return image;  
        }
    }
}
我有这样两个类,是将图片进行分割,然后存入xml在用udp进行传输,转xml部分暂不实现,现在的问题是图片分割后无法还原,请高人指点下。