Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   GDI+ GDIPOBJ PNG Farbraum (https://www.delphipraxis.net/205132-gdi-gdipobj-png-farbraum.html)

Gruber_Hans_12345 4. Aug 2020 09:44

GDI+ GDIPOBJ PNG Farbraum
 
Hallo, ich habe ein kleines Problem mit PNG die ich mit Delphi und GDI+ (GDIPOBJ) zeichnen lassen möchte und zwar zeigt er mir in dem gezeichneten Bild kein weiss an, sondern ändert die Farbe in ein sehr helles grau.

mein simplester Code
Delphi-Quellcode:
procedure TForm27.Button3Click(Sender: TObject);
var
    FStream : TMemoryStream;
    SA     : TStreamAdapter;
    FImage : TGPImage;
    Graphs : TGPGraphics;
begin
    FStream := TMemoryStream.Create;
    FStream.LoadFromFile('d:\test.png');
    FStream.Position := 0;
    SA := TStreamAdapter.Create(FStream, soReference);
    FImage := TGPImage.Create(SA, TRUE);
    //FImage := TGPImage.Create(SA, FALSE);
    PAintBox1.Canvas.Brush.Color   := clWhite;
    PAintBox1.Canvas.FillREct(REct(0,0,200,200));
    Graphs := TGPGraphics.Create(PaintBox1.Canvas.Handle);
    Graphs.DrawImage(fImage, 10, 10);
    Graphs.Free;
    fImage.Free;
    fStream.Free;
end;
Ich vermute das er irgendwie irgendwo einen Farbraum definiton oder co hat, aber egal wie ich das PNG abspeichere das graue statt weiss bleibt.

Hat noch wer Tipps was ich da testen kann?

KodeZwerg 4. Aug 2020 11:38

AW: GDI+ GDIPOBJ PNG Farbraum
 
Zitat:

Zitat von Gruber_Hans_12345 (Beitrag 1471117)
Delphi-Quellcode:
FImage := TGPImage.Create(SA, TRUE);

Macht
Delphi-Quellcode:
TGPImage.Create(SA, Bool(True));
einen Unterschied?#

//edit
vielleicht stimmt auch das pixelformat von source und target nicht überein?

Gruber_Hans_12345 4. Aug 2020 11:57

AW: GDI+ GDIPOBJ PNG Farbraum
 
also das BOOL(TRUE) macht keinen unterschied...

wie kann ich das mit dem Pixelformat prüfen?

beim TGPImage kann ich mir das Pixelformat ja ansehen aber beim TGPGraphics finde ich da nichts dazu

Gruber_Hans_12345 4. Aug 2020 12:06

AW: GDI+ GDIPOBJ PNG Farbraum
 
was allerdings auch komisch ist wenn ich mir mit
Delphi-Quellcode:
    memo1.Lines.Add('FImage.PixelFormat : '+IntToStr(FImage.GetPixelFormat));
    Graphs.DrawImage(fImage, 10, 10);
das PixelFormat ausgeben lasse, dann wird das Bild NICHT gezeichnet

mit
Delphi-Quellcode:
        Graphs.DrawImage(fImage, 10, 10);
memo1.Lines.Add('FImage.PixelFormat : '+IntToStr(FImage.GetPixelFormat));
funktioniert es ganz normal

KodeZwerg 4. Aug 2020 12:29

AW: GDI+ GDIPOBJ PNG Farbraum
 
Vielleicht kannst Du Dir das eine oder andere aus diesem Thema abschauen.
Der Quelltext dort samt erster Lösung schaut für mich gut nachvollziehbar aus, Schwerpunkt "Alpha-Kanal" (was bei Dir wahrscheinlich nicht klappt momentan)

Gruber_Hans_12345 4. Aug 2020 12:34

AW: GDI+ GDIPOBJ PNG Farbraum
 
werde ich mir anschauen, aber mein PNG ist eigentlich nur TrueColor OHNE Alpha Kanal das ist ja das komische
sobald ich das PNG als Palette mit 256 Farben speicher dann passt es.

[edit]
leider hats nicht geholfen, da wie gesagt es kein Problem mit dem Alphakanal ist sondern mit der Farbe weiss bzw mit hellen Farben.
Der Pixelformat vom TGPImage ist auf jeden Fall PixelFormat32bppARGB, aber verfälschen tut er mir die Farbe $ffffff


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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