Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 3.411 pregleda

Najnovija ↓

Razlika između slika 12.08.2005. u 15:45 · pre 258 meseci #1
Imam dva bitmap-a. Trebam naći razliku, tj. trebam u novi bitmap upisati ono što se promijenilo u drugom u odnosu na prvi.
Pravi screen capture više puta. Sada želim da samo prvi capture bude pun, dok u ostalim upicujem samo promjene.
Da li ovo može riješiti bez testiranja pixel po pixel??
Re: Razlika između slika 12.08.2005. u 21:15 · pre 258 meseci #2
Radis neku video kompresiju?
Ne moze, moras testirati piksel po piksel.
Cak je ovo i najbrzi nacin.
Re: Razlika između slika 13.08.2005. u 15:44 · pre 258 meseci #3
Radim kompresiju.
Pravim screen capture npr. svakih 50 ms, tako da bi sačuvao prostora moram ovo raditi.
Možel malo pomoći oko PixelPoPixel metode.
Kako napravit da u nekoj slici ne ćelim da neki pixel sadrži informacije o boji?
Konto sam da taj pixel narpavim bijem i onda sliku postavim na transparent?
Ali me zanima da li neki pixel može da ne sadrži nikakvu boju.
Re: Razlika između slika 13.08.2005. u 17:12 · pre 258 meseci #4
Pa ako ne sadrzi "nikakvu boju" onda je taj pixel crn, zar ne :>>
Re: Razlika između slika 13.08.2005. u 17:15 · pre 258 meseci #5
To si u pravu.
Znači trebam sve pixele koji mi netrebaju naštimat na crno.
Re: Razlika između slika 14.08.2005. u 06:32 · pre 258 meseci #6
Uzmes boju piksela sa jedne slike i uzmes boju piksela sa druge slike i oduzmes ih.

Novu sliku dobijas tako sto ovu razliku dodas na prvu sliku.

U pseudo kodu

for x
for y
razlika(x, y) = slika2(x, y) - slika1(x, y)


for x
for y
slika2(x, y) = slika1(x, y) + razlika(x, y)

razlika nije druga slika, vec niz vrednosti koje predstavljaju razliku izmedju dve slike, a koja moze biti i negativna (npr beli piksel postane crn), za razliku od vrednosti boje piksela koja je uvek pozitivna. razlika ce obicno sadrzati male brojeve i nule a to moze dobro da se kompresuje.
Re: Razlika između slika 14.08.2005. u 21:15 · pre 258 meseci #7
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?
Re: Razlika između slika 15.08.2005. u 00:43 · pre 258 meseci #8
Bio si u pravu, bolja je kompresija kada praviš razliku vrijednosti pixela.
Code:

for i:=0 to w-1 do
  for j:=0 to h-1 do
    bmp3.Canvas.Pixels[i,j]:=bmp1.Canvas.Pixels[i,j] - bmp2.Canvas.Pixels[i,j];

Code:

for i:=0 to w-1 do
  for j:=0 to h-1 do
     bmp2.Canvas.Pixels[i,j]:=bmp1.Canvas.Pixels[i,j] - bmp3.Canvas.Pixels[i,j];

Međutim i ovdje imam nekih problema, neki pixeli ne budu iste boje nakon povratka slike.
Re: Razlika između slika 15.08.2005. u 12:34 · pre 258 meseci #9
Rekoh ti da razlika nije nova slika, kao sto ti ovde radis, vec samo matrica. Razlika moze da bude negativna, a piksel je UVEK pozitivan. Tu ti je greska, zbog koje ne dobijas iste boje piksela.

Citaj u helpu o dinamickim nizovima za menjanje velicine matrice, o radu sa fajlovima za snimanje matrice u fajl, a kompresiju nemoj raditi jpeg-om, posto ne kompresujes sliku vec matricu razlika izmedju dve slike. Koristi bilo koji algoritam za kompresiju, imas zlib uz Delphi, a imas i free komponente za kompresiju (zip, lzh). Guglaj...
Re: Razlika između slika 15.08.2005. u 14:04 · pre 258 meseci #10
OK, i ja sam mislio da pixel ne može biti negativan ali sam onda vidio da je TColor deklarisan na slijedeći način
Code:
TColor = -$7FFFFFFF-1..$7FFFFFFF;

Poslušat ću tebe.
Re: Razlika između slika 15.08.2005. u 15:23 · pre 258 meseci #11
Evo napravio sam matricu
Code:

var
  MBitmap:array of array of integer;

w:=bmp1.Width;
h:=bmp1.Height;
SetLength(MBitmap,w,h);
for i:=0 to w-1 do
  for j:=0 to h-1 do
    MBitmap[i,j]:=bmp1.Canvas.Pixels[i,j]-bmp2.Canvas.Pixels[i,j];

Kako sada to snimiti u fajl?
Hoćul u textualni, ili nešto drugo??
Re: Razlika između slika 16.08.2005. u 00:59 · pre 258 meseci #12
Topic u Helpu je File Types

Vazne stvari su
Fajl: file of integer;
AssignFile, Reset, Write

Prvo upisujes visinu i sirinu slike, a zatim piksele.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme