问题是这样的,我有一个byte数组,里面保存了一个图片文件的信息。我不想创建新的文件。我现在想缩小这个图片到一定比例,然后得到一个新byte的数组。

解决方案 »

  1.   

    先通过数据在内在中生成一张图片,然后调整大小,然后保存到Stream然后读回bytes
      

  2.   

    byte[] oldByte = new byte[100];//原始二进制字节流System.IO.MemoryStream ms = new System.IO.MemoryStream(oldByte);
    System.Drawing.Image img1 = System.Drawing.Image.FromStream(ms);
    System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
    System.Drawing.Image img2 = tmp1.GetThumbnailImage(tmp1.Width/2,tmp1.Height/2,myCallback, IntPtr.Zero);//楼主在此调整比例ms = new System.IO.MemoryStream();
    img2.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] newByte = new byte[ms.Length];
    ms.Read(newByte,o,ms.Length);
    ms.Close();
    img1.Dispose();
    img2.Dispose();//得到newByte
      

  3.   

    我不想创建新的文件。
    =============用MemoryStream
      

  4.   

    public static byte[] Test(byte[] oldByte)
    {
    System.IO.MemoryStream ms = new System.IO.MemoryStream(oldByte);
    System.Drawing.Image img1 = System.Drawing.Image.FromStream(ms);
    System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
    System.Drawing.Image img2 = tmp1.GetThumbnailImage(tmp1.Width/2,tmp1.Height/2,myCallback, IntPtr.Zero);//楼主在此调整比例 ms = new System.IO.MemoryStream();
        img2.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] newByte = new byte[ms.Length];
    ms.Read(newByte,o,ms.Length);
    ms.Close();
    img1.Dispose();
    img2.Dispose();

    return newByte;//得到newByte
    }
    public static bool ThumbnailCallback()
    {
    return false;
    }
      

  5.   

    很久以前我做过同样的尝试
    就是用MemoryStream
    但遇到与楼主同样的问题
    后来放弃了
    也许是水平不够
    关注一下~
      

  6.   

    刚才的代码确有问题,sorry~ 更正如下:public static byte[] Test(byte[] oldByte)
    {
    System.IO.MemoryStream ms = new System.IO.MemoryStream(oldByte);
    System.Drawing.Image img1 = System.Drawing.Image.FromStream(ms);
    System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
    System.Drawing.Image img2 = img1.GetThumbnailImage(img1.Width/2,img1.Height/2,myCallback, IntPtr.Zero);//楼主在此调整比例 ms = new System.IO.MemoryStream();
    img2.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] newByte = new byte[ms.Length];
    ms.Position=0;//漏了这个
    ms.Read(newByte,0,newByte.Length);
    ms.Close();
    img1.Dispose();
    img2.Dispose(); return newByte;//得到newByte
    }
    public static bool ThumbnailCallback()
    {
    return false;
    }
      

  7.   

    终于搞定了,呵呵。Eddie005(♂) №.零零伍 (♂) 少给了一行代码。
    byte[] newByte = new byte[ms.Length];
             //在这里插入下面的语句。
    ms.Read(newByte,o,ms.Length);
    ms.Close();
    img1.Dispose();
    img2.Dispose();=================================================
    ms.Seek(0, SeekOrigin.Begin);原因可能是
    ms = new System.IO.MemoryStream();
        img2.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);填充ms流的时候会把流的位置的指针移到了结尾。
    所以读的时候就返回空内容了。