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:

  1. function JpegStartsInBlob
  2.          (PicField:TBlobField):integer;
  3. var
  4.  bS     : TADOBlobStream;
  5.  buffer : Word;
  6.  hx     : string;
  7. begin
  8.  Result := -1;
  9.  bS := TADOBlobStream.Create(PicField, bmRead);
  10.  try
  11.   while (Result = -1) and
  12.         (bS.Position + 1 < bS.Size) do
  13.   begin
  14.    bS.ReadBuffer(buffer, 1);
  15.    hx:=IntToHex(buffer, 2);
  16.    if hx = 'FF' then begin
  17.      bS.ReadBuffer(buffer, 1);
  18.      hx:=IntToHex(buffer, 2);
  19.      if hx = 'D8' then Result := bS.Position - 2
  20.      else if hx = 'FF' then
  21.       bS.Position := bS.Position-1;
  22.    end; //if
  23.   end; //while
  24.  finally
  25.   bS.Free
  26.  end;  //try
  27. 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:

  1. var
  2.   bS  : TADOBlobStream;
  3.   Pic : TJpegImage;
  4.   adotBazaPonudaSkica: TblobField;
  5. begin
  6. adotBazaPonudaSkica := TBlobField(dbgrdBazaPonuda.DataSource.DataSet.FieldByName('Skica'));
  7.   bS := TADOBlobStream.Create
  8.         (adotBazaPonudaSkica, bmRead);
  9.   try
  10.     bS.Seek(JpegStartsInBlob(adotBazaPonudaSkica),
  11.             soFromBeginning);
  12.     Pic:=TJpegImage.Create;
  13.     try
  14.      Pic.LoadFromStream(bS);
  15.      imgPrikaz.Picture.Graphic:=Pic;
  16.     finally
  17.      Pic.Free;
  18.     end;
  19.   finally
  20.     bS.Free
  21.   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?

  1. query.sql.text:='select BLOB_POLJE from TABELA where USLOV';
  2. query.open;
  3. ms:=TMemoryStream.create;
  4. try
  5.   TBlobField(query.fields[0]).SaveToStream(ms);
  6.   query.close;
  7.   ms.position:=0;
  8.   // sad ti je blob u memory streamu i mozes da mu radis sta hoces,
  9. finally
  10.  ms.free;
  11. 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

  1. 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 931 korisnika na forumu :: 24 registrovanih, 6 sakrivenih i 901 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: 04bokibole, A.R.Chafee.Jr., branko7, BUDDAR70, Dorcolac, kutija11, Lester Freamon, majstro, Milometer, MiloradKomadic, N.e.m.a.nj.a., Natuzzi, Nobunaga, Orijen, Petar25, RAKITNICA, Sagotolio, saputnik plavetnila, stegonosa, synergia, tomigun, Trpe Grozni, x78186, zlaya011