Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Optimierung von Pixel

  Alt 7. Apr 2016, 19:04
Scanline gibt ja die Farbe zurück
Ich muss sie aber zuweisen
Du kannst beides damit machen:
Delphi-Quellcode:
var
  B: TBitmap;
  X, Y: Integer;
  P: PByte;
begin
  B := TBitmap.Create;
  try
    B.PixelFormat := pf24Bit;
    B.Width := 200;
    B.Height := 200;
    for Y := 0 to B.Height - 1 do
    begin
      P := B.ScanLine[Y];
      for X := 0 to B.Width - 1 do
      begin
        P^ := 0; Inc(P);
        P^ := 255; Inc(P);
        P^ := 0; Inc(P);
      end;
    end;
    Canvas.Draw(0, 0, B);
  finally
    B.Free;
  end;
end;
Das füllt dein Bitmap in der Farbe rot.

Statt mit PByte zu arbeiten, kannst du auch PDWord verwenden (der Speicher sollte eh aligned sein, weshalb du auch beim letzten Pixel mit dem pf24Bit Format kein invalid-read bekommen solltest) und dann die einzelnen Farbwerte per Bitshifts reinpacken:
Delphi-Quellcode:
var
  B: TBitmap;
  X, Y: Integer;
  P: PDWord;
begin
  B := TBitmap.Create;
  try
    B.PixelFormat := pf24Bit;
    B.Width := 200;
    B.Height := 200;
    for Y := 0 to B.Height - 1 do
    begin
      P := B.ScanLine[Y];
      for X := 0 to B.Width - 1 do
      begin
        P^ := (0 shl 8) or (255 shl 16) or (0 shl 24);
        P := PDWord(PByte(P) + 3); // 3 byte per pixel for pf24Bit
      end;
    end;
    Canvas.Draw(0, 0, B);
  finally
    B.Free;
  end;
end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 7. Apr 2016 um 19:08 Uhr)
  Mit Zitat antworten Zitat