Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL Server dan Resim Okuma
#1
Selamun Aleykum,

Merhaba arkadaşlar.

SQL servera image de ki resmimi kaydettim lakin okuyamıyorum.

https://www.youtube.com/watch?v=EaCJmcR5V_g

bu videoda ekleme ve okumayı anlatmış. Lakin benim delphide 

TBlobStreamMode = (bmRead, bmWrite, bmReadWrite);

gelmiyor.

Okuma kodu şöyle

uses DBTables;

procedure LoadPicture;
var
bs : TBlobStream;
begin
 if d.SiparisTResim.value = Nil then
    begin
       Image1.Picture.Graphic:=Nil;
    end
 else
    begin
       bs := TBlobStream(d.SiparisT.CreateBlobStream(d.SiparisTResim, bmRead));
       try 
          bs.Position :=0;
          Image1.Picture.LoadFromStream(bs);
       finally
          bs.Free;
       end;   
    end;
end;



bmRead bende çıkmıyor.

Ne yapmalıyım?
Cevapla
#2
VCL için alternatif öneri, Jedi bileşen setinde DBimage bileşeni var. Veritabanındaki jpg tipindeki resimleri doğrudan gösterebiliyor.
Cevapla
#3
(18-05-2021, Saat: 18:36)frmman Adlı Kullanıcıdan Alıntı: VCL için alternatif öneri, Jedi bileşen setinde DBimage bileşeni var.  Veritabanındaki jpg tipindeki resimleri doğrudan gösterebiliyor.

DBimage yerine Image e yüklemek istiyorum.  

Kodlarda sıkıntı yok Ama  'bmRead' parametresi gelmiyor.

Delphide bi ayarmı gerekiyor?

uses  Data.DB;


yazınca problem çözüldü.
Cevapla
#4
uses jpeg; 
...
....


Function TDataModul.JPEGSentinelsAreOK (Const Filename: TBlobField): Boolean;
Var
  FileStream: TStream;
  w1: Word; // a "word" is always 2 bytes long
  w2: Word;
Begin
  ASSERT (SizeOf (Word) = 2);
  FileStream := TBlobStream.Create (Filename, bmRead);
  Try
      FileStream.Seek (0, soFromBeginning); 
      FileStream.Read (w1, 2);
      FileStream.Position := FileStream.Size - 2;
      FileStream.Read (w2, 2)
  Finally
      FileStream.Free
  End;
  Result := (w1 = $D8FF) And (w2 = $D9FF);
End;

Procedure TDataModul.ResimOku (ResimField: TBlobField; Resim: TPicture);
Var
  jpg: TJPEGImage;
  stbmp: TStream;
  bmp: TBitmap;
  stjpg: TStream;
Begin
  If Resimfield.isnull Then
  Begin
      Resim.Assign (Nil);
      Exit;
  End;
  If JPEGSentinelsAreOK (ResimField) Then
  Begin //1
      jpg := TJPEGImage.Create;
      bmp := Tbitmap.Create;
      stjpg := TBlobStream.Create (ResimField, bmRead);
      stbmp := TMemoryStream.Create;
      jpg.LoadFromStream (stjpg);
      If Jpg.PixelFormat = jf24bit Then
          Bmp.PixelFormat := pf24bit
      Else
          Bmp.PixelFormat := pf8bit;
      Bmp.Width := Jpg.Width;
      Bmp.Height := Jpg.Height;
      Bmp.Canvas.Draw (0, 0, Jpg);
      Bmp.SaveToStream (stbmp);
      Resim.Assign (bmp);
      bmp.Free;
      jpg.Free;
      stjpg.Free;
      stbmp.Free;
  End;
End;

Datamodul onchange olayındada

Datamodul.ResimOku (Datamodul.QSorguRESIM, image1.picture);

Şeklinde kullanabilirsiniz.
Cevapla
#5
(18-05-2021, Saat: 18:47)frmman Adlı Kullanıcıdan Alıntı:
uses jpeg; 
...
....


Function TDataModul.JPEGSentinelsAreOK (Const Filename: TBlobField): Boolean;
Var
  FileStream: TStream;
  w1: Word; // a "word" is always 2 bytes long
  w2: Word;
Begin
  ASSERT (SizeOf (Word) = 2);
  FileStream := TBlobStream.Create (Filename, bmRead);
  Try
      FileStream.Seek (0, soFromBeginning); 
      FileStream.Read (w1, 2);
      FileStream.Position := FileStream.Size - 2;
      FileStream.Read (w2, 2)
  Finally
      FileStream.Free
  End;
  Result := (w1 = $D8FF) And (w2 = $D9FF);
End;

Procedure TDataModul.ResimOku (ResimField: TBlobField; Resim: TPicture);
Var
  jpg: TJPEGImage;
  stbmp: TStream;
  bmp: TBitmap;
  stjpg: TStream;
Begin
  If Resimfield.isnull Then
  Begin
      Resim.Assign (Nil);
      Exit;
  End;
  If JPEGSentinelsAreOK (ResimField) Then
  Begin //1
      jpg := TJPEGImage.Create;
      bmp := Tbitmap.Create;
      stjpg := TBlobStream.Create (ResimField, bmRead);
      stbmp := TMemoryStream.Create;
      jpg.LoadFromStream (stjpg);
      If Jpg.PixelFormat = jf24bit Then
          Bmp.PixelFormat := pf24bit
      Else
          Bmp.PixelFormat := pf8bit;
      Bmp.Width := Jpg.Width;
      Bmp.Height := Jpg.Height;
      Bmp.Canvas.Draw (0, 0, Jpg);
      Bmp.SaveToStream (stbmp);
      Resim.Assign (bmp);
      bmp.Free;
      jpg.Free;
      stjpg.Free;
      stbmp.Free;
  End;
End;

Datamodul onchange olayındada

Datamodul.ResimOku (Datamodul.QSorguRESIM, image1.picture);

Şeklinde kullanabilirsiniz.

Çok teşekkür ederim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  server programinda hani veritabani dogru olur. sadikacar60 4 306 30-01-2024, Saat: 21:06
Son Yorum: sadikacar60
  dxRichEditControl Resim Kaydı m_ekici 0 206 31-10-2023, Saat: 01:42
Son Yorum: m_ekici
  OPC Server veri okuma enigma 1 344 13-09-2023, Saat: 11:50
Son Yorum: shooterman
  ReadProcessMemory ile veri okuma nasıl yapılır eraendless 2 413 07-09-2023, Saat: 00:35
Son Yorum: veteran
  Parmak okuma cihazından data okuma kozmik16 4 2.348 20-08-2023, Saat: 02:38
Son Yorum: engerex



Konuyu Okuyanlar: 1 Ziyaretçi