Wie zu malen einen Bereich in einer bitmap mit 'transparent weiß'?
Möchte ich ersetzen alle Pixel in einem rechteckigen Bereich einer Bitmap mit 'transparent weiß', d.h., a=0, b=255, r=255, g=255.
FillRectangle nicht tun Sie dies - angesichts einer transparenten Pinsel, die vorhandenen Pixel werden nicht geändert.
Brauche ich SetPixel individuell für jedes pixel in dem Rechteck?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die
Graphics.CompositingMode
Eigenschaft. Zum Beispiel:Die tatsächliche Farbe, die Sie verwenden, spielt keine Rolle, du bekommst ein Schwarzes Rechteck mit einem alpha-Wert von 0.
Ich glaube, dass müssen Sie mit SetPixel (oder gleichwertige Methode für die Einstellung der Farbwerte direkt), um den Pixel zu "transparent weiß".
Können Sie die
Graphics.Clear
Methode, um die Farbe oder Pixel, aber Sie können es nicht verwenden, setzen Sie auf transparente und eine Farbe. Ich versuchte dies, um die Pixel in einem Teil einer bitmap:Dem Pixel in der region am Ende als "transparent schwarz": 0,0,0,0. Auch die Zeichnung eine solide weißes Rechteck vor dem löschen nicht hilft. Wenn der alpha ist null in einer Farbe, die andere Farbe Komponenten sind ebenfalls null.
Mit einer fast transparenten alpha-like 1 funktioniert gut, die Pixel, die am Ende als "nahezu transparent weiß": 1,255,255,255.
Wenn Sie die composite-Malerei Methoden, dann die alpha wird verwendet, um die Mischung der Farbe, so wird nichts passieren.
Wenn Sie möchten, legen Sie die bitmap, entweder von Daten mit dem hintergrund, den Sie wollen, oder stellen Sie den hintergrund mit LockBits die Daten Bearbeiten, die en-masse.
Könnten Sie auch in der Lage sein zu tun, mit einer bitblt-Methode mit den entsprechenden Flaggen, aber ich weiß nicht, wie das zu übersetzen, um verwalteten code.
Wichtiger Tipp:
Stellen Sie sicher, wenn Sie das Bild erstellen Sie hierzu
und nicht
Es sparen Sie einige Probleme. Gehen Sie nicht davon, 32 bit bedeutet alpha-Kanal 😉
Diesen hack sollte den trick tun:
g.Clear(Color.FromArgb(0, 255, 255, 255));
Obwohl Hans Passant die Antwort ist wahrscheinlich besserSinn macht, da Sie von der Zeichnung werden mit 0% Deckkraft. 🙂
Eine schnelle Lösung für eine Kontrolle wäre ein color-key. Sie können die key-Farbe des Steuerelements auf eine bestimmte Farbe (z.B. magenta); alle Pixel mit dieser Farbe würde dann transparent gemacht werden. (Wenn die Steuerung dies unterstützt, natürlich.)
Dass, oder bitmap.MakeTransparent(color) für Allgemeine Zwecke. Das problem ist wieder, dass die angegebene Farbe wäre transparent, so dass Sie würde haben, um eine Farbe auszuwählen, die nicht im Bild vorhanden sein. (Es ist ein weiteres Beispiel hier: http://msdn.microsoft.com/en-us/library/ms172507%28v=VS.80%29.aspx)
Bearbeiten:
Am Ende der LockBits () - Ansatz erwähnt in den anderen Kommentaren sein könnte, was Sie suchen. Wenn Sie verstehen, wie die Breite und stride-Werte interagieren, es ist einfach zu manipulieren, das Bild auf der niedrigsten möglichen Ebene.
Hier ein Allgemeines Beispiel: http://www.bobpowell.net/lockingbits.htm
Nur stellen Sie sicher, dass das Bild Transparenz unterstützt (siehe PixelFormat), dann sperren Sie das Bild mit einem geeigneten Modus (z.B. PixelFormat.Format32bppArgb), Schleife über alle pixel Lesen Byte schreiben Sie Ihre neue Farbe, etc.