将图像转换为字节[]

本文关键字:字节 图像 转换 | 更新日期: 2023-09-27 18:02:24

我想开始学习如何将图像分开以找到其中的模式,但为了做到这一点,我需要先看看是什么构成的。我想把png转换成一个字节数组,这样我就可以把它打印出来,看看我是否能识别数组值中的简单模式。

到目前为止我有这个

public MainWindow()
{
    InitializeComponent();
    System.Drawing.Image image;
    image = System.Drawing.Image.FromFile("one.png");            
    byte[] imArray = imageToByteArray(image);
    String bytes = "";
    foreach (Char bite in imArray)
    {
        bytes += "-"+bite;
    }
    MessageBox.Show(bytes);

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

但它似乎不起作用。当调用转换方法时,它会给我一个null错误。我不知道为什么这不起作用,因为我对组件的理解是零。

如果你能建议一个更简单的方法来实现这个转换,请随时发布它。我没有卡在这段代码,我只是想要一个工作的例子,所以我有一个起点。

谢谢!

将图像转换为字节[]

我建议从位图开始查看二进制数据-大多数其他格式存储压缩数据,因此您没有机会通过查看字节来了解图像内部的内容。

你想要的方法是Bitmap.LockBits。本文还包括如何从文件中读取和查看t位的完整示例,节选如下:

Bitmap bmp = new Bitmap("c:''fakePhoto.jpg");
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData =
   bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);
int bytes  = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];
// Copy the RGB values into the array.
Marshal.Copy(bmpData.Scan0, rgbValues, 0, bytes);

您可以尝试将图像转换为dataURI,然后将其转换为blob,这里有一个如何将daturi转换为blob的示例来自DataURL的Blob ?

function dataURItoBlob(dataURI) {
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
  }
var bb = new BlobBuilder();
bb.append(ab); return bb.getBlob(mimeString);
}

或者您可以直接在二进制编辑器中打开文件