2013-03-04 100 views
0

我想开始学习如何拆分图像以找到其中的模式,但为了做到这一点,我需要先看看是什么原因造成的。我想要一个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(); 
} 

但它似乎并不奏效。当调用转换方法时,它给了我一个空错误。我不知道为什么这是行不通的,因为我对这些组织的理解是没有意义的。

如果你可以建议一个更简单的方法来让这个转换免费发布它。我没有卡在这个代码我只想一个工作的例子,所以我有一个起点。

谢谢!

+0

如果您没有转换文件的格式,为什么不简单地使用FileStream将文件作为二进制文件读取? – 2013-03-04 17:25:28

+4

[File.ReadAllBytes](http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx) – 2013-03-04 17:26:00

+0

在你的例子中,你打开一个名为“one.png”的文件,但选择' imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);'作为ImageFormat。 – netblognet 2013-03-04 17:30:12

回答

2

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

你想要的方法是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); 
0

你可以尝试将图像转换为dataURI然后将其转换为一个blob,继承人的你怎么可以转换dataURIs为例斑点 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); 
} 
-1

或者你可以在二进制编辑器中打开该文件。

+0

为什么downvote?问题是“寻找”模式。 – dvallejo 2014-01-16 21:20:24