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.
PNG (mit Farbransparenz) in BMP wandeln
-
- 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
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: PNG (mit Farbransparenz) in BMP wandeln
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.
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.
-
- 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
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
Re: PNG (mit Farbransparenz) in BMP wandeln
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.
Theoretisch hat das 32 Bit Bitmap auch 8 Bit übrig. Ob darin aber die Transparenz ist, kann ich aus dem FF nicht sagen.
Re: PNG (mit Farbransparenz) in BMP wandeln
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
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;
-
- 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
Vielen Dank für das Demo!
Das klappt auch unter XP.
Grüße Markus.
Das klappt auch unter XP.
Grüße Markus.
EleLa - Elektronik Lagerverwaltung - www.elela.de