我想开始学习如何撕开图像以找到它们中的图案,但为了做到这一点,我需要先了解它是什么构成的。我想取一个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错误。我不知道为什么这不起作用,因为我对合作伙伴的理解是愚蠢的。
如果您可以建议一种更简单的方法来使此转换随意发布。我没有坚持这个代码我只想要一个有效的例子,所以我有一个起点。
谢谢!
答案 0 :(得分:2)
我建议从Bitmap开始查看二进制数据 - 大多数其他格式存储压缩的数据,因此您无法通过查看字节来了解图像内部的内容。
您想要的方法是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);
答案 1 :(得分:0)
你可以尝试将图像转换为dataURI然后将其转换为blob,这是一个如何将dataURI转换为blob的示例 Blob from DataURL?
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);
}
答案 2 :(得分:-1)
或者你可以在二进制编辑器中打开文件。