12. juni 2004 - 20:28Der er
12 kommentarer og 1 løsning
sammenligne to billeder?
jeg har en function til at tage screenshots og skære billederne ud, er der så en måde man kan tjekke om 2 billeder er ens? evt læse pixels eller så noget..
har ledt lidt på nettet men uden held
skal bruge det til en timer der skal aktivere en function når et bestemt stykke grafik bliver vist på skærmen
procedure TForm1.Button1Click(Sender: TObject); var b1, b2: TBitmap; c1, c2: PByte; x, y, i, different: Integer; // Counter for different pixels begin b1 := Image1.Picture.Bitmap; b2 := Image2.Picture.Bitmap; Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal different := 0; for y := 0 to b1.Height - 1 do begin c1 := b1.Scanline[y]; c2 := b2.Scanline[y]; for x := 0 to b1.Width - 1 do for i := 0 to BytesPerPixel - 1 do // 1, to 4, dep. on pixelformat begin Inc(different, Integer(c1^ <> c2^)); Inc(c1); Inc(c2); end; end; end;
Den skriver at der ikke er noget der hedder BytesPerPixel, hvordan skal det løses? Kan man bare plotte et tilfældigt tal ind?
Synes godt om
Slettet bruger
13. juni 2004 - 14:40#4
Prøv at indsætte 4 i stedet for BytesPerPixel.
Synes godt om
Slettet bruger
13. juni 2004 - 14:50#5
Ellers virker det her måske :o):
procedure TForm1.Button1Click(Sender: TObject); var b1, b2: TBitmap; c1, c2: PByte; x, y, different: Integer; // Counter for different pixels begin b1 := Image1.Picture.Bitmap; b2 := Image2.Picture.Bitmap; Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal different := 0; for y := 0 to b1.Height - 1 do begin c1 := b1.Scanline[y]; c2 := b2.Scanline[y]; for x := 0 to b1.Width - 1 do if RGB(c1[x].rgbtRed,c1[x].rgbtGreen,c1[x].rgbtBlue) <> RGB(c2[x].rgbtRed,c2[x].rgbtGreen,c2[x].rgbtBlue) then Inc(different); end;
if different = 0 then ShowMessage('Billederne er ens'); end; (ikke testet)
procedure TForm1.Button1Click(Sender: TObject); var b1, b2: TBitmap; c1, c2: PByte; x, y, i, different: Integer; // Counter for different pixels begin b1 := Image1.Picture.Bitmap; b2 := Image2.Picture.Bitmap; Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal different := 0; for y := 0 to b1.Height - 1 do begin c1 := b1.Scanline[y]; c2 := b2.Scanline[y]; for x := 0 to b1.Width - 1 do for i := 0 to 4 - 1 do // 1, to 4, dep. on pixelformat begin Inc(different, Integer(c1^ <> c2^)); Inc(c1); Inc(c2); end; end; if different = 0 then begin showmessage('billederne er ens...'); end else begin showmessage('billederne er forskellige...') end; end;
Ja den bruger ikke meget, har selv haft brugt det i et program af samme stand som du skriver du skal lave. Og der virker det uden problemer...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.