私は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);
編集:私はそれを取得してからずっと後のBitBltでそれを使用する場合どうやらた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を呼び出します。あなたは不平等な人であなた自身のために見ることができます。 – jnm2
@ jnm2、あなたが正しいです、DrawImageUnscalledはDrawImageを呼び出しますが、オーバーロードよりはるかに高速な画像のサイズ変更を行わないオーバーロードバージョンを呼び出します。また、私はDrawImageUnscalledがBitBltより速いとは言わなかった、私はそれが "かなりよい性能を提供する"と言った。 –
私が必要とする情報はHBITMAPにあり、変更できませんので、FromHBitmapまたはBitBlt(高速)を使用してGDI +に取得する必要があります。それから私は、双線形のストレッチでイメージを描くことを計画しています。しかし、DrawImageについてはわかりませんでした。それは役に立つでしょう。知らせてくれてありがとうございます! – jnm2