Я создал библиотеку, где мне нужно заполнить байтовый массив из 307200 элементов (320x240x4 (= 32 бита)) в правильный порядок для растрового изображения, дисплей использует формат RGBA, и я хотел бычтобы избежать использования взаимодействия для использования GetBitmapBits, как я делаю в данный момент, в то время как я предпочитаю писать его в коде c #, чтобы понять, как на нем печатаются байты.
Может ли кто-нибудь мне помочь?Вот мой фактический код
/// <summary>
/// LONG GetBitmapBits(
/// __in HBITMAP hbmp,
/// __in LONG cbBuffer,
/// __out LPVOID lpvBits
/// );
/// </summary>
/// <param name="hbmp"></param>
/// <param name="cbBuffer"></param>
/// <param name="lpvBits"></param>
/// <returns></returns>
[DllImport("Gdi32", EntryPoint = "GetBitmapBits")]
private extern static long GetBitmapBits([In] IntPtr hbmp, [In] int cbBuffer, [Out] byte[] lpvBits);
[DllImport("Gdi32", EntryPoint = "GdiFlush")]
private extern static void GdiFlush();
private void FillPixelArray(Bitmap bmp, ref byte[] array, bool bw = false)
{
Color tmp;
if (!bw)
{
IntPtr hbmp = bmp.GetHbitmap();
GdiFlush();
GetBitmapBits(hbmp, array.Length * Marshal.SizeOf(typeof(byte)), array);
}
else
{
for (int x = 0; x < LgLcd.NativeConstants.LGLCD_BMP_WIDTH; ++x)
{
for (int y = 0; y < LgLcd.NativeConstants.LGLCD_BMP_HEIGHT; ++y)
{
tmp = bmp.GetPixel(x, y);
array[y * 160 + x] = (byte)((tmp.R == 255 && tmp.G == 255 && tmp.B == 255) ? 0 : 255);
}
}
}
}
Другое дело, GetBitmapBits быстрее, чем любая реализация, которую я могу сделать в C #?