以下は関連するコード行です。基本的に私は、より大きなビットマップを作成し、これに描画し、それからより小さなイメージを作成し、それを画面(wxDC mdc)に描画します。それを透明にするために、まずwxMemoryDCとwxGCDCを使用します。これが私がどのようにして分かりますか?wxWidgets描画の透明性の問題
問題は、切り抜かれたsub_bmpに何も描画されていない場合を除き、完全に機能し、透明ではなく黒い背景が描画されることです。
アイデア?
*bmp = wxBitmap(bwidth, bheight, 32);
bmp->UseAlpha();
wxColor colour;
colour.Set("#800020");
penWidth = 4;
mdc->SetPen(wxPen(colour, penWidth));
wxMemoryDC memDC (*bmp);
wxGCDC dc(memDC);
dc.SetBackground(*wxTRANSPARENT_BRUSH);
dc.Clear();
dc.SetBrush(*wxRED_BRUSH);
dc.SetPen(wxPen(colour, penWidth));
...
b1.x = pix_offset_x - (cpix.x - b1.x);
b1.y = pix_offset_y - (cpix.y - b1.y);
b2.x = pix_offset_x - (cpix.x - b2.x);
b2.y = pix_offset_y - (cpix.y - b2.y);
dc.DrawLine(b1, b2);
memDC.SelectObject(wxNullBitmap); //releases the bitmap from memDC
wxRect subSize(xloc,yloc , vp->pix_width*scaleFactor, vp->pix_height*scaleFactor);
wxBitmap sub_bmp = bmp->GetSubBitmap(subSize);
wxImage tmpimg = sub_bmp.ConvertToImage();
const wxBitmap tbmp(tmpimg.Scale(t_width, t_height),32);
mdc->DrawBitmap(tbmp, 0, 0, true);
これはEVT_PAINT内で行っていますか?はいの場合 - wxPaintDCを作成しましたか?そうでない場合は、EVT_PAINT内でこれを行う必要があります。新しいペイントイベントがすべてあなたのビットマップを上書きするからです。 – Igor
bmpは.hファイル内でグローバルに宣言されており、プラグインを作成しているコアプログラムからwxDCが与えられています。それがmdcです。私はwxPiantDCを作成しません。 – user1489223
あなたはEVT_PAINTから絵を描いていますか?この場合、wxPaintDCを使用しない場合でも作成する必要があります。または、あなたはmdcがwxPaintDCオブジェクトであると言っていますか? – Igor