HBITMAP
をクリップボードにコピーしようとするといくつかの問題があります。私のHBITMAP
はCOLORREF
配列から作成され、正しく表示することができます。ここではそれが作成される方法です。WinAPI:HBITMAPをクリップボードに正しくコピーする
COLORREF* colors = new COLORREF[imageSize[0] * imageSize[1]];
for (int i = 0; i < imageSize[1]; i++) {
for (int j = 0; j < imageSize[0]; j++) {
colors[imageSize[0] * i + j] = RGB(/* ... */);
}
}
// Create bitmap
HBITMAP hBitmap = CreateBitmap(imageSize[0], imageSize[1], 1, 32, (void*)colors);
delete[] colors;
クリップボードに私のビットマップをコピーするために、私はこのコードの小片を使用します。
OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();
私は私のアプリを実行すると、私はコピーすることができていますそのビットマップを貼り付けて、たとえばMS Paintのどこかに貼り付けます。しかし、もう一度コピーしようとすると、上記のコードの最初の部分が再度実行されない限り、クリップボードの内容を貼り付けることはできません。 MSDN documentationで
は、SetClipboardDataが成功した場合
は、システムはHMemのパラメータによって識別されるオブジェクトを所有していると言われています。
私はこれが何を意味するのか正確には分かりませんが、私の問題の原因だと思います。 hereが必要な機能を実行する例が見つかりましたが、同じ種類の変数は使用されていないようです。今回は文字列を使用したもう1つの例はhereです。
私はこの最後の例を私のケースにどのように翻訳するかについてはあまりよく分かりません。あなたは私を正しい方向に向けることができますか?
「COLORREF」はRGBおよびRGBA画像用ですが、これは32ビットのグレースケール画像のようです。私はこれをやったので、それは長いです、そして、私はドキュメンテーションに明らかな警告を見ることができませんでした。 –
@RemyLebeau興味深いことに、http://stackoverflow.com/questions/32086618/who-releases-handle-in-setclipboarddatacf-bitmap-hbitmapのOPテストの結果は明らかに、システムが実際にビットマップ。 –
[クリップボード形式](https://msdn.microsoft.com/en-us/library/windows/desktop/ms649013.aspx)ドキュメントの 'CF_BITMAP'に関する注意を参照してください。 'CF_BITMAP'はDDBであり、そのまま保存することはできません。変換されてDIBとして保存されます。 –