簡體   English   中英

將圖像轉換為字節[]

[英]Convert Image into Byte[]

我想開始學習如何將圖像拆開以找到圖像中的圖案,但是要做到這一點,我需要首先了解其組成。 我想采用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();
}

但這似乎不起作用。 調用轉換方法時,它給我一個空錯誤。 我不知道為什么這行不通,因為我對這些組件的了解很少。

如果您可以提出一種更簡便的方法來進行此轉換,請隨時發布。 我沒有停留在這段代碼上,我只想要一個有效的示例,所以我有一個起點。

謝謝!

我建議從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);

您可以嘗試將圖片轉換為dataURI,然后將其轉換為Blob,以下是如何將DataURIs轉換為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);
}

或者,您可以只在二進制編輯器中打開文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM