ich mühe mich immer noch mit BGRA rum.
Das ist gar nicht einfach (tausende Properdies, Functions und Procedures).
Nun habe ich ein Programm welches ein BGRAGraphikControl in der Form hat.
1. In der Procedure FormCreate erzeuge ich ein BGRABitmap (in FormClose gebe ich das wieder frei).
2. In der Procedure FormShow lade ich das Bitmap (Anhang flieger.bmp) in das BGRABitmap und setze den Winkel auf 45°.
Ausserdem ändere ich die Farbe des Fliegers von Weiss auf Rot (CanvasBGRA.Pixels[x, y]).
Die Procedure TForm1.BGRAGraphicControl1Redraw wird von selber aufgerufen.
3. In der Procedure TForm1.BGRAGraphicControl1Redraw drehe ich das Bitmap (TForm1.BGRAGraphicControl1Redraw).
Dann speichere ich das Bitmap in eine Datei (BGRAFlieger.bmp).
Dach laden ich diese Datei (BGRAFlieger.bmp) in mein Image1.
Code: Alles auswählen
var
bildflieger: TBGRABitmap;
angle: integer;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
bildflieger.Free;
CloseAction:=caFree;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bildflieger:=TBGRABitmap.Create;
end;
procedure TForm1.BGRAGraphicControl1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
begin
Bitmap.FillTransparent;
Bitmap.PutImageAngle(Width div 2, Height div 2, bildflieger, angle, TResampleFilter.rfBestQuality, bildflieger.Width div 2, bildflieger.Height div 2);
if FileExists(ExtractFilePath(ParamStr(0))+'BGRAFlieger.bmp') then
begin
DeleteFile(ExtractFilePath(ParamStr(0))+'BGRAFlieger.bmp');
end;
Bitmap.SaveToFile(ExtractFilePath(ParamStr(0))+'BGRAFlieger.bmp');
Image1.Picture.Bitmap.LoadFromFile(ExtractFilePath(ParamStr(0))+'BGRAFlieger.bmp');
end;
procedure TForm1.FormShow(Sender: TObject);
var x: integer;
var y: integer;
begin
angle:=45;
bildflieger.FillTransparent;
bildflieger.LoadFromFile(ExtractFilePath(ParamStr(0))+'flieger.bmp');
for x:=0 to bildflieger.Width do
begin
for y:=0 to bildflieger.Height do
begin
if bildflieger.CanvasBGRA.Pixels[x, y] = clBlack then
begin
bildflieger.CanvasBGRA.Pixels[x, y]:=BGRA(0, 0, 0, 0);
end else begin
bildflieger.CanvasBGRA.Pixels[x, y]:=BGRA(255, 0, 0, 255);
end;
end;
end;
end;
Aber wenn ich im Canvas auf die Pixel im Image1 zugreifen und auswerten will,
so bekomme ich kei Rotes Pixel.
Weder mit Image1.Canvas noch mit Image1.Picture.Bitmap.Canvas.
Wie kann das sein?
Gruß
Jürgen