前提・実現したいこと
GDI+で画像を表示後、その上にAlphaBlendで黒い半透明のマスクを描画し、
かつ、特定の矩形のみマスクしないように表示したいと思っています。
※全体にマスクがかかり、一部の矩形(複数)のみマスクがかかっていない状態です。
発生している問題・エラーメッセージ
特定のPCでのみ、マスクが表示されません(画像は表示される)。 表示する方法を教えていただきたいです。 ※多数のPCでは正常に描画できているので、特定PCの環境が特殊なのかもしれません。 その場合は、特定PCのどの部分(ライブラリのバージョンなど?)を確認すればよいかご教示ください。
該当のソースコード
C++
1{ 2 // 画像の描画 3 PAINTSTRUCT psImage; 4 HDC hdc = BeginPaint(hwnd, &psImage); 5 Graphics graphics(hdc); 6 Image image(L"IMAGE.jpg"); 7 graphics.DrawImage(&image, 0, 0, imgWidth, imgHeight); 8 9 (後処理) 10 EndPaint(hwnd, &psImage); 11 12 // 特定の矩形をマスクしないためにValidateする 13 ValidateRect(hdc, validateRect); 14 15 // 半透明マスク描画 16 PAINTSTRUCT psMask; 17 HDC hdcBase = BeginPaint(hwnd, &psMask); 18 HDC tempHdc = CreateCompatibleDC(hdcBase); 19 20 BLENDFUNCTION bf; 21 bf.BlendOp = AC_SRC_OVER; 22 bf.BlendFlags = 0; 23 bf.SourceConstantAlpha = 128; 24 bf.AlphaFormat = 0; 25 AlphaBlend(hdcBase, 0, 0, imgWidth, imgHeight, tempHdc, 0, 0, imgWidth, imgHeight, bf); 26 27 (後処理) 28 EndPaint(hwnd, &psMask); 29}
試したこと
ValidateRectを省いてもマスクは描画されませんでした。
画像とマスクの描画をPAINTSTRUCT〜EndPaintで分けずに処理すると特定PCでも描画されました。
が、そうすると途中でValidateを挟むことができません。
任意の矩形(複数)を描画しない方法があれば、それでも構いません。
補足情報(FW/ツールのバージョンなど)
VisualStudio 2012 C++
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/28 15:58