2013-03-04 53 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