AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bildartefakt mit GDI+
Thema durchsuchen
Ansicht
Themen-Optionen

Bildartefakt mit GDI+

Ein Thema von qsqsqs · begonnen am 29. Mär 2020 · letzter Beitrag vom 1. Apr 2020
Antwort Antwort
qsqsqs

Registriert seit: 14. Jan 2012
1 Beiträge
 
#1

Bildartefakt mit GDI+

  Alt 29. Mär 2020, 09:08
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;
  Mit Zitat antworten Zitat
29. Mär 2020, 10: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.
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: Bildartefakt mit GDI+

  Alt 1. Apr 2020, 15:12
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.
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: Bildartefakt mit GDI+

  Alt 1. Apr 2020, 18:55
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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