Thema: Delphi zwei Bitmaps vergleichen

Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: zwei Bitmaps vergleichen

  Alt 1. Feb 2010, 15:13
Zitat von thepaine91:
Das ganze nochmal kommentiert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

// Dieses Beispiel zeigt das direkte Zeichnen in das Bitmap
var
  x,y : Integer;
  BitMap : TBitMap;
  P : PByteArray;
begin
  BitMap := TBitMap.create;
  try
    BitMap.LoadFromFile('C:\Programme\Gemeinsame Dateien\Borland Shared\Images\Splash\256color\factory.bmp');
    for y := 0 to BitMap.Height -1 do
    begin
      P := BitMap.ScanLine[y]; // Füllt einen Array of Byte mit den Daten der angegebenen Zeile.
      for x := 0 to BitMap.Width -1 do
        // P = length Bitmap.width -1
// Wenn man jetzt row 1 ausliest und P unser Bytearray ist und dem zu folge P[1] ausliest hätte man das selbe wie Pixels[1,1]
        P[x] := y;
    end;
    Canvas.Draw(0,0,BitMap);
  finally
    BitMap.Free;
  end;
end;
Jetzt soweit verständlich
Das ganze nochmal verbessert

Du weißt schon, dass das so nicht korrekt ist?
Es gibt soetwas, dass nennt sich Pixelformat. Falls es beispielsweise auf pf24Bit gesetzt ist,
besteht das Bild (bzw dann die einzelnen Rows) aus aneinander gereihten 24/8 Bytes -> r, g, b; wobei die Reihenfolge nicht die gleiche sein muss...

Sieh dir das hier mal an:
Delphi-Quellcode:
var
  Pixel : PByte;
  y, k, x : Integer;
  bytes : Byte;
const
  PixelFormatBytes: Array[TPixelFormat] of Byte = ( 0, 0, 0, 1, 0, 2, 3, 4, 0 );
begin
  bytes := PixelFormatBytes[bmp.PixelFormat];
  if bytes = 0 then
    Exit; // PixelFormat wird nicht unterstützt ... kannst du dann gerne von mir aus umändern ...
  for y := 0 to bmp.Height - 1 do
  begin
    Pixel := bmp.Scanline[y];
    for x := 0 to bmp.Width - 1 do
      for k := 0 to bytes - 1 do
      begin
        Pixel^ := 0;
        inc( Pixel );
      end;
  end;
end;
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat