PNG (mit Farbransparenz) in BMP wandeln

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

PNG (mit Farbransparenz) in BMP wandeln

Beitrag von MmVisual »

Hallo,

Ich habe ein PNG Bild, das als Hintergrund farblos ist. Nun möchte ich das Bild je nach Einstellung in ein BMP Bild wandeln und bei der Wandlung soll die zuvorige Transparenz in ein bestimmte Farbe gewandelt werden.

Ich will unter WinXP den Desktop Hintergrund anpassen und dazu muss ich dem Windows eine BMP Datei unterschieben. Irgendwie klappt das nicht bei jedem WinXP System.

Bei Lazarus unter Win7 sieht das geladene PNG Bild auch anders aus als bei WinXP (gleiche EXE). Bei Win7 ist die Transparenz wirklich transparent, bei WinXP wird das Bild weiß.

Weiß jemand wie das richtig geht?

Vielen Dank, Grüße Markus.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: PNG (mit Farbransparenz) in BMP wandeln

Beitrag von theo »

Bei PNG ist Transparenz meistens relativ (Alpha Transparenz)
D.h. jedes Pixel kann einen unterschiedlichen Wert für seine Deckkraft haben.
Die Umwandlung eines solchen Bildes in eine "harte" Maske (<=24bit BMP Transparenzfarbe) ist oft optisch nicht so befriedigend.
Man müsste auch angeben, welcher Trigger-Wert (Byte Range) als Transparent gelten soll.

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: PNG (mit Farbransparenz) in BMP wandeln

Beitrag von MmVisual »

Wenn ich das Bild mittels Paint.net öffne, (PNG Datei), dann sehe ich die Transparenz. Wenn ich das als BMP abspeichere dann geht die transparenz in jedem Fall verloren und der Hintergrund wird weiß. Ich meine eine BMP-32Bit kann auch keine Farbtransparenz speichern. Oder habe ich nur das falsche Programm?
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: PNG (mit Farbransparenz) in BMP wandeln

Beitrag von theo »

Weiss ich auch nicht, musst halt googeln. Auch zu den Unterschieden XP <> 7 etc.
Theoretisch hat das 32 Bit Bitmap auch 8 Bit übrig. Ob darin aber die Transparenz ist, kann ich aus dem FF nicht sagen.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: PNG (mit Farbransparenz) in BMP wandeln

Beitrag von Michl »

Hier sind noch weitere Infos: http://de.wikipedia.org/wiki/Windows_Bitmap - Zitat für Windows-Bitmap: Alphakanäle, Farbkorrektur und Metadaten werden nicht unterstützt.

Wobei das Einfügen eines transparenten Bildes auf ein Canvas und dessen Speicherung eigentlich recht einfach umzusetzen ist, z.B. 3 Scrollbars (R,G,B), die die Hintergrundfarbe definieren

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Pic:=TPicture.Create;
  Pic.LoadFromFile('PNG_transparency_demonstration_1.png');
  Color:=0;
  RBar.Position:=0;
  GBar.Position:=0;
  BBar.Position:=0;
  Doublebuffered:=True;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Bitmap: TBitmap;
begin
  Bitmap:=TBitmap.Create;
  Bitmap.SetSize(ClientWidth, ClientHeight);
  Bitmap.Canvas.CopyRect(ClientRect, Canvas, ClientRect);
  Bitmap.SaveToFile('Test.bmp');
  Bitmap.Free;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Pic.Free;
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.StretchDraw(ClientRect, Pic.Bitmap);
end;
 
procedure TForm1.ChangeColor(Sender: TObject);
begin
  Color:=
    RBar.Position +
    GBar.Position shl 8 +
    BBar.Position shl 16;   
 
  Invalidate;
end;
Dateianhänge
Bsp.zip
(340.49 KiB) 84-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: PNG (mit Farbransparenz) in BMP wandeln

Beitrag von MmVisual »

Vielen Dank für das Demo!
Das klappt auch unter XP.
Grüße Markus.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten