2013-07-17 135 views
0

我試圖在c#中編寫一個程序,通過以太網發送一個幀。將.jpg圖像的像素值讀入字節數組

目前我有在1920x1080分辨率和非常不同的字節大小的.jpg測試圖像。

我試圖將JPG圖像轉換爲字節數組,我尋找類似的答案,但是當我嘗試它們時,我得到了每個圖像包括437,1030,1013字節的字節數組。考慮到圖像是高清分辨率的,這是沒有意義的。如何將圖像文件轉換爲1920 * 1080 * 3(RGB)字節數組?請記住,我正在嘗試開發一個實時應用程序,該應用程序應該能夠以高速率發送幀,所以此代碼不會很慢。

在此先感謝。 Tunc

+1

你有什麼試過的?你可以發佈一些代碼嗎? http://stackoverflow.com/help/how-to-ask –

+0

「所以這段代碼不能慢」 - 但是你的最終版本不會使用你的測試圖像作爲源代碼,所以不需要解碼JPEG文件會嗎? – Rup

+0

這裏有人解釋如何從圖像創建一個字節數組。這可能有幫助。 http://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array-in-c –

回答

0

JPG是一種壓縮格式,這就是爲什麼它的尺寸(和的大小對應的字節數組) 通常會遠遠小於1920 * 1080 * 3。爲了從JPG得到字節數組,你可以使用 流:

Image myImage; 
    ... 
    byte[] result; 

    using (MemoryStream ms = new MemoryStream()) { 
    myImage.Save(ms, ImageFormat.Jpeg); 

    result = ms.ToArray(); 
    } 

如果你想要的是字節數組的形式,你有你的JPG轉換成BMP(或其他原始,未壓縮格式)像素

Bitmap myImage; 
    ... 
    byte[] rgbValues = null; 

    BitmapData data = myImage.LockBits(new Rectangle(0, 0, myImage.Width, myImage.Height), ImageLockMode.ReadOnly, value.PixelFormat); 

    try { 
    IntPtr ptr = data.Scan0; 
    int bytes = Math.Abs(data.Stride) * myImage.Height; 
    rgbValues = new byte[bytes]; 
    Marshal.Copy(ptr, rgbValues, 0, bytes); 
    } 
    finally { 
    myImage.UnlockBits(data); 
    } 
} 
1

讀取Image字節到字節數組:

   Image image = ...; 
       MemoryStream ms = new MemoryStream(); 
       image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 

       if (ms.Length == 0) 
       { 
        ms.Close(); 
        throw new Exception("Bad Image File"); 
       } 

       ms.Position = 0; 
       byte[] baImageBytes = new byte[ms.Length]; 
       ms.Read(baImageBytes , 0, (int)ms.Length); 
       ms.Close(); 

從字節數組創建圖像:

byte[] baImageBytes =... 
Image myImage = Image.FromStream(new MemoryStream(baImageBytes)); 
+0

我不認爲這些都是他想要的。他想從JPEG文件製作一個圖像,然後構造一個字節數組,每個渲染像素使用三個字節,每個RGB使用一個字節。 – Rup