C# 如何将 pictureBox.Image 转换为字节数组?

5
我可以帮忙翻译:

我希望能够快速地将图片框中的图像转换为字节数组。

我看到了这段代码,但我并不需要它。因为图片框中的图像是从数据库中读取的数据,所以我不知道ImageFormat 是什么。

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
    MemoryStream ms = new MemoryStream();
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    return ms.ToArray();
}

如果有人知道快速方法,请告诉我。

谢谢!祝你度过愉快的时光!


1
你必须“知道”ImageFormat。它是图像将要保存的格式,由你决定。它不取决于源格式。 - Marek
@Marek,他可能应该确实具有具有'imageIn.PixelFormat'属性的源格式。 - DarkUrse
2个回答

5
尝试阅读这个链接:http://www.vcskicks.com/image-to-byte.php,希望它能为你提供帮助。
编辑:我猜你已经从Fung的链接中得到了代码片段。如果是这样,那么你需要向下滚动以获取问题的答案...
第二次编辑(来自页面的代码片段 - 感谢Fedor提供信息):
public static byte[] ImageToByte(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

2

这可能不是您要寻找的精确内容,但如果您正在寻找执行某些像素操作时的性能,它可能对您有用..我认为在这里提及它值得一提。

由于您已经使用Image imageIn加载了图像,因此您实际上可以直接访问图像缓冲区,而无需进行任何拷贝,从而节省时间和资源:

public void DoStuffWithImage(System.Drawing.Image imageIn)
{
    // Lock the bitmap's bits.  
    Rectangle rect = new Rectangle(0, 0, imageIn.Width, imageIn.Height);
    System.Drawing.Imaging.BitmapData bmpData =
                    imageIn.LockBits(rect, System.Drawing.Imaging.ImageLockMode.Read,
                    imageIn.PixelFormat);

    // Access your data from here this scan0,
    // and do any pixel operation with this imagePtr.
    IntPtr imagePtr = bmpData.Scan0;

    // When you're done with it, unlock the bits.
    imageIn.UnlockBits(bmpData);
}

如果需要更多信息,请查看MSDN页面。

附注:bmpData.Scan0仅提供对像素有效负载的访问,即无标头!


参数丢失:Dim picture As Byte() = GetBytes(ListView2.Items(index).SubItems(8).Text) `Dim converter As New ImageConverter()` `PictureBox1.Image = DirectCast(converter.ConvertFrom(picture), Image)` - nouman arshad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接