Ich versuche, ein Visual-Objekt, das einen transparenten Hintergrund hat, mithilfe von RenderTargetBitmap ... zu einem Bitmap zu speichern.
%Vor%Es funktioniert, aber die transparenten Pixel werden mit schwarzer Farbe gerendert. Was ist der einfachste Weg, um diese transparenten Pixel in eine andere Farbe zu ändern?
Wenn Sie das Bild als JPG speichern, wird Transparent schwarz angezeigt, da JPG den transparenten Kanal AFAIK nicht unterstützt. Mögliche Lösung: Speichern Sie als PNG oder malen Sie mit einer angemessenen Hintergrundfarbe.
Ich habe das nicht getestet, aber in der Theorie sollte es funktionieren.
Verwenden Sie die CopyPixels () - Methode, um alle Pixeldaten aus Ihrer RenderTargetBitmap in ein Array zu extrahieren.
Fragen Sie dann den Alpha-Kanal aller Pixel ab und geben Sie an, wo sie gleich 0x00 (vollständig transparent) sind, und stellen Sie die Farbe auf den Hintergrund ein, den Sie möchten. Wenn Sie eleganter sein möchten, müssen Sie die "Farbmathematik" verwenden, um die Farben in halbtransparenten Pixeln richtig einzustellen.
Wenn Sie über ein angepasstes Pixelfeld verfügen, erstellen Sie abschließend eine neue BitmapSource.
Um dies auf Festplatte zu speichern, müssen Sie wahrscheinlich ein Image im Speicher erstellen und seine Quelle auf Ihre neue Bitmap-Quelle setzen und Ihre RenderToBitmap erneut ausführen.
Ich hoffe, es hilft.
BEARBEITEN: Nach dem Posten hatte ich ein anderer Gedanke, der vielleicht einfacher ist.
Wenn Sie einen Klon oder Snapshot des visuelles Element, das Sie zu speichern versuchen und legen Sie es in ein neues In-Memory-Panel (wie ein Raster oder eine Leinwand), Sie könnte einfach den Hintergrund ändern Das Panel soll die gewünschte Farbe haben.
Dann würden Sie das Panel als Ihr verwenden Quelle für RenderTargetBitmap.
Tags und Links wpf