Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildartefakt mit GDI+ (https://www.delphipraxis.net/203825-bildartefakt-mit-gdi.html)

qsqsqs 29. Mär 2020 08:08

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;

DP-Maintenance 29. Mär 2020 09:07

Dieses Thema wurde am "29. Mar 2020, 10:07 Uhr" von "Daniel" aus dem Forum "Sonstige Fragen zu Delphi" in das Forum "Multimedia" verschoben.

Memnarch 1. Apr 2020 14:12

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.

venice2 1. Apr 2020 17:55

AW: Bildartefakt mit GDI+
 
Zitat:

Ich habe festgestellt, dass das Problem darin besteht, dass DrawImage das Bild bei jeder Zeichnung verschlechtert.
Mit 100% Sicherheit nicht.

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 12:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz