我對使用p/invoke調用相當陌生,並且想知道是否有人可以指導我如何從hbitmap中檢索原始像素數據(unsigned char *)。C++從hbitmap獲取原始像素數據
這是我的情景:
我加載在C#側.NET位圖對象,併發送它的IntPtr到我的非託管C++方法。一旦我在C++側收到hbitmap ptr,我想訪問Bitmaps的像素數據。我已經做了一個方法,接受一個無符號的char *,它表示來自c#的原始像素數據,但是我發現從c#中提取字節[]是相當緩慢的。這就是爲什麼我想發送Bitmap ptr而不是將Bitmap轉換爲byte []並將其發送給我的C++方法。
:用於獲取位圖的IntPtr
Bitmap srcBitmap = new Bitmap(m_testImage);
IntPtr hbitmap = srcBitmap.GetHbitmap();
C#代碼用於導入C++方法將接收HBITMAP處理程序
int Resize::ResizeImage(unsigned char* srcImg){
//access srcImgs raw pixel data (preferably in unsigned char* format)
//do work with that
return status;
}
問題
[SuppressUnmanagedCodeSecurityAttribute()]
[DllImport("MyDll.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern int ResizeImage(IntPtr srcImg);
C++方法C#代碼
1)由於我在IntPrt中發送,我的C++方法參數可以是一個unsigned char *嗎?
2)如果不是,我如何從C++訪問位圖的原始數據?
感謝大衛,這正是我發現還!我發佈我的代碼作爲答案,希望可以幫助其他人尋找相同的解決方案。 – Matthew
你當然可以這樣做。但它也應該可以生成高效的託管代碼。使用不安全和指針。 –