我試圖將託管的位圖複製到非託管的浮點數組(用於Opencl.net包裝的Cl.CreateImage2D)。不幸的是,我得到了一個異常,但是如果我將數組長度(srcIMGBytesSize)除以4,我就成功了。數組的長度有問題嗎?圖像格式是Format32bppArgb。我正在使用單聲道。Marshal.copy from bitmap.scan0 float []
System.Drawing.Bitmap bmpImage = new System.Drawing.Bitmap(inputImage);
bitmapData = bmpImage.LockBits(new Rectangle(0, 0, bmpImage.Width, bmpImage.Height), ImageLockMode.ReadOnly, inputImage.PixelFormat);
IntPtr srcBmpPtr = bitmapData.Scan0;
int bitsPerPixel = Image.GetPixelFormatSize(inputImage.PixelFormat);
srcIMGBytesSize = bitmapData.Stride * bitmapData.Height;
float[] srcImage2DData = new float[srcIMGBytesSize];
Marshal.Copy(srcBmpPtr, srcImage2DData, 0, srcIMGBytesSize); //Exception at this line
bmpImage.UnlockBits(bitmapData);
試圖將數據複製到浮動的時候,我發現了以下異常[]數組:
System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception.
at System.Runtime.InteropServices.Marshal.CopyToManaged(IntPtr source, Object destination, Int32 startIndex, Int32 length)
at System.Runtime.InteropServices.Marshal.Copy(IntPtr source, Single[] destination, Int32 startIndex, Int32 length)
謝謝!
非常感謝,這使得很有意義! –
@Ilya:如果在棧上使用指針,如果不安全,可能會跳過最後3行。 – leppie
還有一個問題 - 我將如何將最終數組轉換爲IntPtr?所以基本上我想要做的是將bitmapData.scan0從指針轉換爲byte []到指向float []的指針。 –