BGRA und Image

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

BGRA und Image

Beitrag von juelin »

Hallo,
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;
 
Auf dem Bildschirm wird der Flieger im Image1 angezeigt.
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
Dateianhänge
flieger.bmp
flieger.bmp (622.67 KiB) 1819 mal betrachtet
bild1.jpg
(99.81 KiB) Noch nie heruntergeladen

paweld
Beiträge: 91
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: BGRA und Image

Beitrag von paweld »

Im Anhang finden Sie ein Beispiel - ich hoffe, ich habe Sie richtig verstanden
Dateianhänge
Project1.zip
(377.23 KiB) 42-mal heruntergeladen
Grüße / Pozdrawiam
paweld

Benutzeravatar
juelin
Beiträge: 290
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: BGRA und Image

Beitrag von juelin »

Hallo PAWELD,
end lich mal einer der mich versteht.
Recht herzlichen Dank. Super gemacht.
Werde Ihr Programm noch anpassen mit MAPVIEW anstatt fester Karte.
Könnte sein, das ich da nochmal Ihre Hilfe brauche.
Ich schreibe Sie dann an.
Einen schönen Tag und viele Grüße
Jürgen

Antworten