Beim Starten kann ich eine Bitmap-Maske anhand der Grafik ausrechnen, dies braucht leider ca. 7 Sekunden bis sie errechnet ist. Daher wollte ich die Maske als Ressource einfach in die EXE linken, dann braucht es so gut wie keine Zeit.
Das Problem: Sobald ich die von der EXE erzeugte Maske abspeichere und dann diese wieder rein lade wird die Maske nicht mehr richtig behandelt.
Code: Alles auswählen
// Maske laden
st := TLazarusResourceStream.Create('SplashMsk', 'PNG');
imgSplashMask := TImage.Create(Self);
imgSplashMask.Picture.Bitmap.SetSize(imgSplash.Width, imgSplash.Height);
imgSplashMask.SetBounds(0, 0, imgSplash.Width, imgSplash.Height);
//imgSplashMask.Picture.PNG.LoadFromStream(st);
st.Free;
imgSplashMask.Picture.Bitmap.Monochrome := True;
for y := 0 To imgSplash.Picture.Bitmap.Height - 1 Do
Begin
for x := 0 To imgSplash.Picture.Bitmap.Width - 1 Do
Begin
If imgSplash.Picture.Bitmap.Canvas.Pixels[x,y] <> clWhite Then
imgSplashMask.Picture.Bitmap.Canvas.Pixels[x,y] := clWhite
Else imgSplashMask.Picture.Bitmap.Canvas.Pixels[x,y] := clBlack;
end;
end;
imgSplashMask.Picture.SaveToFile('/home/pi/svn/SplashMskX.png');
Lazarus kann auch das Bild nicht als BMP Datei ablegen, die Datei ist dann immer 0 Byte groß. Meine Idee war, dass Lazarus das korrekte Bild erzeugt, speichert und ich das dann einfach nur noch benutzen muss.
Diese gleiche Datei einlesen und als Transparenz-Maske verwenden klappt nicht, dann ist nichts mehr transparent.
Egal welches Pixel-Format ich für die Grafik verwende, das mit der Transparenz klappt nur bei der Grafik, die das Lazarus selbst errechnet hatte.
PS: Unter Windows ist es kein Problem, da kann ich das Masken-Bild Problemlos aus der Ressource laden und aktivieren. Nur Linux spackt rum.
Dankeschön für eure Hilfe, Grüße Markus