rad sa slikama u delphiju

2

rad sa slikama u delphiju

offline
  • Pridružio: 19 Nov 2005
  • Poruke: 11
  • Gde živiš: Novi Sad

nešto sam uradio, ali nisam mislio da će biti baš toliko komplikacija. polazi mi za rukom da čitam blob polja preko funkcije koja kreira blobstream iz polja databaze. kod za ovu funkciju sam našao na internetu i definicija funkcije izgleda ovako:

function JpegStartsInBlob          (PicField:TBlobField):integer; var  bS     : TADOBlobStream;  buffer : Word;  hx     : string; begin  Result := -1;  bS := TADOBlobStream.Create(PicField, bmRead);  try   while (Result = -1) and         (bS.Position + 1 < bS.Size) do   begin    bS.ReadBuffer(buffer, 1);    hx:=IntToHex(buffer, 2);    if hx = 'FF' then begin      bS.ReadBuffer(buffer, 1);      hx:=IntToHex(buffer, 2);      if hx = 'D8' then Result := bS.Position - 2      else if hx = 'FF' then       bS.Position := bS.Position-1;    end; //if   end; //while  finally   bS.Free  end;  //try end;

odgovarajuću akciju koja koristi gore navedenu proceduru i prikazuje sliku sam malo prepravio i kao takva mi radi, tj. učitava sliku u komponentu Timage koju sam nazvao imgPrikaz. za one koji imaju sličnih problema, navešću kod i za tu proceduru:

var   bS  : TADOBlobStream;   Pic : TJpegImage;   adotBazaPonudaSkica: TblobField; begin adotBazaPonudaSkica := TBlobField(dbgrdBazaPonuda.DataSource.DataSet.FieldByName('Skica'));   bS := TADOBlobStream.Create         (adotBazaPonudaSkica, bmRead);   try     bS.Seek(JpegStartsInBlob(adotBazaPonudaSkica),             soFromBeginning);     Pic:=TJpegImage.Create;     try      Pic.LoadFromStream(bS);      imgPrikaz.Picture.Graphic:=Pic;     finally      Pic.Free;     end;   finally     bS.Free   end;


sve ovo fino radi čak i na event AfterScroll mada sam mislio da će sve ipak biti mnogo jednostavnije.
što se tiče accesove baze, uverio sam se da mi mnogo brljavi, ali kako sam je već uveo na mnogim mestima, zasada bih se zadržao na njoj. ubuduće, naravno, treba gledati neka druga rešenja.
zahvaljujem se svima koji su se javili iako nisam siguran da neću naići još na neki problem vezan za rad sa slikama.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Malo kompleksan nacin da citas blob... sta mislis o ovome?

query.sql.text:='select BLOB_POLJE from TABELA where USLOV'; query.open; ms:=TMemoryStream.create; try   TBlobField(query.fields[0]).SaveToStream(ms);   query.close;   ms.position:=0;   // sad ti je blob u memory streamu i mozes da mu radis sta hoces, finally  ms.free; end;



offline
  • Pridružio: 19 Nov 2005
  • Poruke: 11
  • Gde živiš: Novi Sad

lepo izgleda. evo upravo to pokušavam, međutim uporno mi izbacuje JPEG error #53!

doduše, pošto meni slika treba da se prikaže kad je polje već selektovano od strane korisnika, zašto ne bi moglo i
TBlobField(ADTable1.fields[BrojKoloneUKojojJeSlika]).SaveToStream(ms);?

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Problem je sto slika nije zapisana kako valja. Sledeci put je zapishi sam.. slicna procedura

update TABELA set BLOB_POLJE = :param where USLOV

TBlobField(query.params[0]).LoadFromStream(ms,ftBlob);

naravno, predhodno si stavio JPG u stream

offline
  • prm 
  • Građanin
  • Pridružio: 11 Jun 2006
  • Poruke: 94

Inace slici moze da se pristupa kao binarnoj datoteci pa posle odkrijes sta ti je sta u zaglavlju to imas i na onoj vikipediji ili tako slicnim stranicama


malo je komplikovano ja sam radio nesto jednostavno uzimao sam svaki bajt po bajt i to prikazivao u memo kontroli mislim da se nesto slicno moze i iskoristiti da pristupas slici bajt po bajt

HH

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Nema potrebe za tim. imaju komponente, osim TImage koje prepoznaju sve formate. Samo stavis LoadFromStream.

offline
  • prm 
  • Građanin
  • Pridružio: 11 Jun 2006
  • Poruke: 94

Eto imalo nemalo potrebe mogao bi svaki fajl da otvaras tako bez neke potrebe da imas toliko komponenate


Tempring

HH

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Pitanje je da li zelis sam sebi da dokazes da si dobar programer ili ti treba da odradis posao na najlaksi i najbrzi nacin.
Seti se: TIME = MONEY

offline
  • prm 
  • Građanin
  • Pridružio: 11 Jun 2006
  • Poruke: 94

Sve je to relativno.....

U svakom slucaju dobro je i to znati ja nisam znao ali sam naucio....

Ko zna mozda mi nekada bas ta stvari i zatreba....


HH

Ko je trenutno na forumu
 

Ukupno su 718 korisnika na forumu :: 22 registrovanih, 5 sakrivenih i 691 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., croato, danilopu, Dorcolac, dragon986, Drug pukovnik, Fog of War, goxin, HrcAk47, ikan, kaisarevic1, Kibice, Konda, Lieutenant, Mar_ko, Sale.S, Sr.Stat., Srki98, Toni, Vlada1389, vlvl, Wisdomseeker