Evo kako sam ja to uradio
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,w,h:integer;
bmp1,bmp2,bmp3:TBitmap;
JPGImage:TJpegImage;
begin
// bmp1 i bmp2 imam na hard disku i njih otvaram
// bmp3 mi predtavlja razliku bmp1 i bmp2, tj. sve one pixele koji se nalaze u bmp2 a kojih nema u bmp1
bmp1:=TBitmap.Create;
bmp2:=TBitmap.Create;
bmp3:=TBitmap.Create;
bmp1.LoadFromFile('c:\pic1.bmp');
bmp2.LoadFromFile('c:\pic2.bmp');
w:=bmp1.Width;
h:=bmp1.Height;
bmp3.Width:=w;
bmp3.Height:=h;
for i:=1 to w do
for j:=1 to h do
begin
//bmp3.Canvas.Pixels[i,j]:=0;
if bmp1.Canvas.Pixels[i,j]<>bmp2.Canvas.Pixels[i,j] then
bmp3.Canvas.Pixels[i,j]:=bmp2.Canvas.Pixels[i,j]; // ovdje računa razliku
end;
// konvertujem bmp3 u jpg da bi bio mnogo, mnogo manji
JPGImage:=TJpegImage.Create;
JPGImage.Assign(bmp3);
JPGImage.CompressionQuality:=75;
JPGImage.Smoothing:=True;
JPGImage.SaveToFile('c:\pic3.jpg');
bmp3.SaveToFile('c:\pic3.bmp');
// prikazujem sva tri bitmapa na formi
Image1.Picture.Bitmap:=bmp1;
Image2.Picture.Bitmap:=bmp2;
Image3.Picture.Bitmap:=bmp3;
end;
Pogledaj gore onu liniju
Code:
bmp3.Canvas.Pixels[i,j]:=0;
Kada nju uključim slika bude veća. Znači ako je slika bijela onda je veća.
Eh sada recimo da imam samo bmp1 i bmp3 (nemam bmp2).
Trebam da dobijem bmp2
To mi ne ide. Igleda da bmp3 ondje gdje ne treba ništa prikazati prikazuje bijelu.
Možda da pravim matricu razlika po pixelima. Kako proširivati dimenzije matrice dinamički, i kako zapravo snimiti tu matricu u fajl?