HBITMAP에서 GDI + 비트 맵으로 BitBlt를 보내려고합니다. 나는이 시도했지만 아무 반응이 없습니다 :BitBlt를 직접 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이 작동하지 않습니다. 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를 사용하는 것이 왜 효과가 없을까요?
문제를 발견했을 수도 있지만 아직 해결 중입니다. DrawImageUnscaled는 더 빠르지 않습니다. 실제로 DrawImage를 호출합니다. 당신은 dissasembler와 함께 자신을 위해 볼 수 있습니다. – jnm2
@ jnm2, 맞아, DrawImageUnscalled가 DrawImage를 호출하지만 오버로드보다 훨씬 빠른 이미지 크기 조정을 수행하지 않는 오버로드 버전을 호출합니다. 또한 DrawImageUnscalled가 BitBlt보다 빠르다고 말하지는 않았지만 "상당히 좋은 성능을 제공합니다"라고 말했습니다. –
필요한 정보는 HBITMAP에 있으며 변경할 수는 없으므로 FromHBitmap 또는 BitBlt (더 빠르게)를 사용하여 GDI +로 가져와야합니다. 그런 다음 쌍 선형 스트레칭으로 이미지를 그릴 계획입니다. 하지만 DrawImage에 대해서는 몰랐습니다. 유용 할거야. 알려 줘서 고마워! – jnm2