Ich versuche zu zeichnen, was zu einem Bildschirm-Ton-Effekt über ein vorhandenes Bild hinausgeht, aber ich möchte eine Fläche leer lassen. Denken Sie daran, wie Scheinwerfer in alten Spielen manchmal gemacht werden, wo der größte Teil des Bildes abgedunkelt ist, und aber ein Teil davon ist die "normale" Farbe.
Dafür brauche ich mein Overlay transparent (da das Originalbild durchscheinen muss). Ich zeichne das auch mit wxDC.DrawCircle(...)
(mit einem transparenten Pinsel), da ich nicht über eine Kreisfläche zeichnen kann.Benutzerdefinierte punktierte Stift
Problem ist, der Stipple (Bildschirm-Ton-Effekt) ist nicht transparent, es ist solide. Ich habe fast alles ausprobiert, was mir einfällt, aber nichts scheint zu funktionieren. Meine aktuellen Code ist in etwa wie folgt aus:
const char* ScreenToneColor[] =
{
/* columns rows colors chars-per-pixel */
"3 3 2 1",
"X c Black",
"O c None",
/* pixels */
"OOO",
"OXO",
"OOO"
};
CustomPanel::CustomPanel(wxWindow* parent)
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(151, 151))
{
SetBackgroundStyle(wxBG_STYLE_PAINT);
// MemberVariables
m_Stipple = wxBitmap(wxImage(ScreenToneColor));
m_ScreenTone = wxPen(*wxBLACK, 2 * VeryLargeRadius, wxPENSTYLE_STIPPLE);
m_ScreenTone.SetStipple(m_Stipple);
}
// Supplied with a wxAutoBufferedDC
void CustomPanel::Render(wxDC& dc)
{
dc.SetBrush(*wxGREEN_BRUSH);
dc.DrawRectangle(m_PanelRectange);
// "fade out" trimmed areas by drawing a ring.
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.SetPen(m_ScreenTone);
dc.DrawCircle(m_AnimatedCenter, VeryLargeRadius + m_VisibleRadius);
}
Ich habe versucht, die Maske liefern, die verschiedenen stipple Masken (wxPENSTYLE_STIPPLE_MASK_OPAQUE
vermeiden) usw. Ich bin auf 10 Fenster und Kompilieren gegen wxWidgets 3.1, obwohl Das Projekt wird auf anderen Betriebssystemen und möglicherweise einer niedrigeren Bibliotheksversion erstellt/ausgeführt.
können Sie den Git HEAD versuchen? Und überprüfen, wie sich die anderen Plattformen verhalten? – Igor
Ich kann versuchen, Git HEAD morgen oder so etwas, aber ich habe keine Möglichkeit, auf den anderen Plattformen selbst zu testen. –
ok, bitte überprüfe den HEAD und frage jemanden nach der anderen Plattform. – Igor