Можно ли BitBlt непосредственно на растровую карту GDI+?

StackOverflow https://stackoverflow.com/questions/4574436

  •  14-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь бить от HBITMAP до растровой карты GDI+. Я попробовал это, но ничего не происходит:

Bitmap Buffer = New Bitmap(608, 392)
Graphics BufferGraphics = Graphics.FromImage(Buffer);
IntPtr hBufferDC = BufferGraphics.GetHdc();

...

BitBlt(hBufferDC, x, y, width, height, hInputDC, 0, 0, SRCCOPY);

РЕДАКТИРОВАТЬ: Видимо, HDC не работает, если я приобретаю его, а затем намного позже использую его с BitBlt. Мне нужно было убедиться, что HDC все еще действителен. Это решение:

Bitmap Buffer = New Bitmap(608, 392)
Graphics BufferGraphics = Graphics.FromImage(Buffer);

...

IntPtr hBufferDC = BufferGraphics.GetHdc();
BitBlt(hBufferDC, x, y, width, height, hInputDC, 0, 0, SRCCOPY);
BufferGraphics.ReleaseHdc(hBufferDC);

Кто -нибудь знает, почему это изменение необходимо? Почему это не может работать, чтобы использовать HDC, который был получен раньше, как в первом примере?

Это было полезно?

Решение

Проверьте образец в конце этого страница на pinvoke.net. Дополнительные вызовы CreateCompatibledc и SelectObject могут сделать ваш образец работы.

В качестве альтернативы, вы можете рассмотреть возможность использования graphics.drawimageunscalled, что позволило бы вам реализовать свой код только на стороне .NET и все равно предложит довольно хорошую производительность.

Обновлять (Из -за обновленного вопроса)
Я не знаю точно, почему HDC становится недействительным через некоторое время, но согласно MSDN Вы называете GETHDC и ReleaseHDC в парах и группируйте вызовы в код GDI+ между ними: «Вызовы в методах GETHDC и релиз HDC должны появляться в парах. Во время объема пары методов GETHDC и релиз HDC вы обычно вызовывают только вызовы функций GDI. "

Таким образом, в соответствии с документацией, то, как вы это сделали во втором образце, - это путь, и вы не должны кэшировать и повторно использовать значения из метода GETHDC.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top