![]() |
Bildartefakt mit GDI+
Hallo!
In meiner Anwendung sind mir einige Bildartefakte aufgefallen. Ich habe festgestellt, dass das Problem darin besteht, dass DrawImage das Bild bei jeder Zeichnung verschlechtert. Wenn ich ein Bild über ein transparentes Bild zeichne, ändert sich die Pixelfarbe ein wenig. Wenn ich es mehrfach verzeichne, verschlechtert sich die Pixelfarbe weiter. Im beigefügten Beispiel (verwendet GDIPAPI, GDIPOBJ) sehen Sie, dass die Farbwerte nach einigen Zeichnungen von 29 auf 15 zurückkehren. Ich habe verschiedene Eigenschaften der Grafik ausprobiert (SetInterpolationMode, SetSmoothingMode, SetPixelOffsetMode, SetCompositingQuality), aber das Ergebnis war das gleiche. Kennt jemand von euch eine Lösung für dieses Problem? Vielen Dank im Voraus, MfG, Attila
Code:
procedure TForm2.FormCreate(Sender: TObject);
var bmp, bmporig: TGPBitmap; gr: TGPGraphics; Col: Cardinal; I: Integer; begin bmporig := TGPBitmap.Create(1, 1, PixelFormat32bppARGB); bmporig.SetPixel(0,0, MakeColor(247, 29, 29, 29)); for I := 0 to 15 do begin bmp := TGPBitmap.Create(1, 1, PixelFormat32bppARGB); gr := TGPGraphics.Create(bmp); Gr.DrawImage(bmporig, 0, 0); gr.Free; bmporig.Free; bmporig := bmp; end; bmp.GetPixel(0,0,Col); Label1.Caption := inttostr(getred(col))+ ' ' + inttostr(getgreen(col)) + ' ' + inttostr(getblue(col)) + ' ' + inttostr(getalpha(col)); end; |
Dieses Thema wurde am "29. Mar 2020, 10:07 Uhr" von "Daniel" aus dem Forum "Sonstige Fragen zu Delphi" in das Forum "Multimedia" verschoben.
|
AW: Bildartefakt mit GDI+
Wenn ich mich nicht irre, berücksichtigt GDI+, im Gegensatz zu GDI, standardmäßig den Alphachannel.
Du erzeugst eine Bitmap mit den channeln ARGB, also mit Alpha, und setzt den Alphawert des Pixels auf 247. Das heißt er ist leicht transparent. Setz den mal auf 255 oder nutz das RGB Pixelformat. |
AW: Bildartefakt mit GDI+
Zitat:
Wenn du wie @Memnarch schon sagte mit Alpha Kanälen arbeitest dann ist es logisch das wenn du ein Bild über das andere Kopierst dieser Kanal ebenfalls mit kopiert wird. Du hast bei 5 "Bildern im Bild" 5 Layer die übereinander gelegt werden der Alpha Kanal addiert sich dann entsprechend. Teste: Erstelle mit deinem Zeichnungs-Programm 5 Layer und lege sie übereinander dann siehe was mit deinem Alpha Kanal (bzw. deiner Farbe) passiert. GDI+ macht es nicht anders. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz