我在HDD上有幾個(〜2GB)原始24bpp RGB文件。 現在我想檢索它的一部分並將其縮放到所需的大小。
(允許的唯一尺度是1,1/2,1/4,1/8,...,1/256)C#從System.Drawing.Bitmap有效獲取像素數據
所以我目前正在讀從感興趣的長方形每行到一個數組,這使我留下了一張正確高度但錯誤寬度的位圖。
作爲下一步我從新創建的陣列創建一個位圖。
這是通過使用指針來完成的,因此不會複製涉及的數據。
接下來,我在位圖上調用GetThumbnailImage,它會創建一個具有正確尺寸的新位圖。
現在我想返回新創建的位圖的原始像素數據(作爲字節數組)。 但爲了實現目前我正在使用LockBits將數據複製到新數組中。
所以我的問題是:有沒有辦法將像素數據從位圖獲取到字節數組而不復制它?
喜歡的東西:
var bitmapData = scaledBitmap.LockBits(...)
byte[] rawBitmapData = (byte[])bitmapData.Scan0.ToPointer()
scaledBitmap.UnlockBits(bitmapData)
return rawBitmapData
我很清楚,這是不行的,這只是一個例子,我基本上要實現。
要工作,而不是不安全{} void * to byte [],請嘗試 IntPtr ptr = bitmapData.Scan0; int bytes = Math.Abs(bitmapData.Stride)* bitmapData.Height; raw = new byte [bytes]; Marshal.Copy(ptr,raw,0,bytes); return raw; // byte [] – antonio