现在有一张JPEG图片,因为图片不清晰,有大量波纹,所以要求将这个图转化为BMP位图并去掉里面的单数行,目前问题所在就是BMP位图貌似不完整了 ,用BitImage怎么也转换不过去,请求问题所在根源,70分,在线等//读取jpeg后转换,图片大小为704*576
Bitmap bitImage = new Bitmap(strPath);
            MemoryStream ms = new MemoryStream();
            bitImage.Save(ms, ImageFormat.Bmp);
            byte[] hImageBytes = ms.ToArray();//去掉单行后大小应该为704*288
byte[] buffer = new byte[704 * 288 * 3];//新图缓冲
                int nLength = mHPHM.hImageBytes.Length;
                int nTemp = 0;
                for (int i = 0; i < 576; i++)
                {
                    if (i % 2 == 0)
                    {
                        Array.Copy(mHPHM.hImageBytes, i * 704 * 3, buffer, nTemp * 704 * 3, 704 * 3);
                        nTemp++;
                    }
                }
Bitmap bit = new Bitmap(new MemoryStream(buffer));?????在此地方出错,显示GDI+一般性错误,我觉得应该是bmp位图数据流被截断的原因所以导致图片不完整,所以比较头大,不知道如何去处理,所以请教CSDN上的各大高手,谢谢,若能得到答案,70分双手奉上,因为本人最多只有70分了

解决方案 »

  1.   

    //更新图像
                if (picCoverImage.Image != null)
                {                using (MemoryStream mem = new MemoryStream())
                    {
                        //克隆Bitmap对象
                        Bitmap bmp = new Bitmap(picCoverImage.Image);
                        bmp.Save(mem, picCoverImage.Image.RawFormat);
                        book.CoverImage = new Binary(mem.ToArray());
                        bmp.Dispose();
                    }
                }
      

  2.   

    不能这样直接截断。不了解Bitmap的内在结构是不能妄自作为的。你可以用GetPixel,SetPixel慢慢做,或用LockBits后,拷贝各个扫描线。
    具体看Bitmap.LockBits的参考和例子
      

  3.   

    Yes!另外还有把图片转换为string处理的方式,你应该会喜欢。
    请看这里#27楼
    http://topic.csdn.net/u/20080724/10/efae17c1-3ed7-4a00-82e2-72c96f2b2af4.html
      

  4.   

    public static byte[] GetImageArray(System.Drawing.Image image)
            {
                System.IO.MemoryStream ms = new MemoryStream();
                image.Save(ms, Image.RawFormat);
                byte[] b=ms.ToArray();
                ms.Close();
                return b;
            }
      
     Bitmap bmp = new Bitmap(openFileDialog1 .FileName );
                    Bitmap bmp2 = new Bitmap(1024, 768, PixelFormat.Format16bppRgb555);
                    Graphics draw = Graphics.FromImage(bmp2);
                    draw.DrawImage(bmp,0,0);
                    pictureBox1.Image = (Image)bmp2 ;
                    FILE = openFileDialog1.FileName;
                    openFileDialog1.Dispose();
                    draw.Dispose();
                    bmp.Dispose();