Delphi Can
TImage ve Sql - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: TImage ve Sql (/showthread.php?tid=1768)



TImage ve Sql - narkotik - 05-01-2018

Merhaba Arkadaşlar,
Resimlerin dosya yolunu değil kendisini saklıyorum. DBImage değil TImage nesnesinde Jpg,Png,Bmp resimlerini yükleyebilmek, veritabanında image veritipli alana kaydetmek formdaki diğer nesneleri çekerken onuda çekmek istiyorum. Streamlerle bu işlemi yaptım Savede sıkıntı yok Load'da sıkıntı yaşıyorum hazır fonksiyon konusunda yardımcı olursanız sevinirim.


TImage ve Sql - mcuyan - 05-01-2018

Çalışan hazır kodlarımdan direk yapıştırıyorum..

var:
 ms: TMemoryStream;
 Surf: TBitmapSurface;
 saveParams : TBitmapCodecSaveParams;

begin
     ms := TMemoryStream.Create;
     Surf := TBitmapSurface.Create;
     Surf.Assign(image6.Bitmap);
     Saveparams.Quality := 100; //Bu kısımda resim boyutunu küçültebilir siniz..
     TBitmapCodecManager.savetostream(ms, Surf, '.jpg',@SaveParams);
     ms.Position := 0;
     TBlobField(MT.FieldByName('parca_res1')).LoadFromStream(ms);
     ms.Free;
     image6.Bitmap := nil;
     surf.Free;
end;



ÇÖZÜM - narkotik - 06-01-2018

Jpg formatında TImage nesnesine resim açma, Sql Kaydetme, Sql'den Yükleme işlemlerini gerçekleştiren yordamları biraz uğraş sonrası yaptım İhtiyacı olanlar için ;

Uses Jpeg;
{$R *.dfm}

procedure ResimSec(Image: TControl);
var
 SPicFileName: string;
 JP: TJPegImage;
 Pic: TPicture;
 Dialog: TOpenPictureDialog;
begin
 Dialog := TOpenPictureDialog.Create(nil);
 Dialog.Title := 'Resim Seç(Jpg)';
 if not((Image.ClassName = 'TDBImage') or (Image.ClassName = 'TImage')) then
   Exit;
 Dialog.Filter := '*.jpg|*.jpg';
 if Image.ClassName = 'TDBImage' then
   TDBImage(Image).Stretch := True
 else
   TImage(Image).Stretch := True;
 Try
   if Dialog.Execute then
   begin
     JP := TJPegImage.Create;
     Pic := TPicture.Create;
     SPicFileName := Dialog.FileName;
     Try
       JP.LoadFromFile(SPicFileName);
       Pic.Assign(JP);
       if Image.ClassName = 'TDBImage' then
         TDBImage(Image).Picture := Pic
       else
         TImage(Image).Picture := Pic;
     Finally
       JP.Free;
       Pic.Free;
     End;
   end;
 Finally
   Dialog.Free;
 End;
end;

procedure ResimKaydetSql(Image: TImage; Query: TADOQuery; Alan: String);
var
 Ms: TMemoryStream;
begin
 Query.Edit;
 if Image.Picture.Graphic = nil then
   Exit;
 Ms := TMemoryStream.Create;
 try
   Image.Picture.Graphic.SaveToStream(Ms);
   Ms.Position := 0;
   TBlobField(Query.FieldByName(Alan)).LoadFromStream(Ms);
 finally
   Ms.Free;
 end;
 Image.Picture := nil;
end;

procedure ResimYukleSql(Image: TImage; Query: TADOQuery; Alan: String);
var
 JPG: TJPegImage;
 Picture: TPicture;
 St: TStream;
begin
 JPG := TJPegImage.Create;
 Picture := TPicture.Create;
 St := TStream.Create;
 Image.Stretch:=True;
 try
   if Query.FieldByName(Alan).AsString='' then Exit;
   St := Query.CreateBlobStream(TBlobField(Query.FieldByName(Alan)), bmRead);
   try
     JPG.LoadFromStream(St);
     Picture.Graphic := JPG;
     Image.Picture := Picture;
   finally
     St.Free;
   end;
 finally
   JPG.Free;
   Picture.Free;
 end;
end;

(05-01-2018, Saat: 22:15)mcuyan Adlı Kullanıcıdan Alıntı: Çalışan hazır kodlarımdan direk yapıştırıyorum..

var:
 ms: TMemoryStream;
 Surf: TBitmapSurface;
 saveParams : TBitmapCodecSaveParams;

begin
     ms := TMemoryStream.Create;
     Surf := TBitmapSurface.Create;
     Surf.Assign(image6.Bitmap);
     Saveparams.Quality := 100; //Bu kısımda resim boyutunu küçültebilir siniz..
     TBitmapCodecManager.savetostream(ms, Surf, '.jpg',@SaveParams);
     ms.Position := 0;
     TBlobField(MT.FieldByName('parca_res1')).LoadFromStream(ms);
     ms.Free;
     image6.Bitmap := nil;
     surf.Free;
end;
Teşekkür Ederim.


TImage ve Sql - Bay_Y - 07-11-2018

Paylaşım için teşekkürler , Elinize sağlık


TImage ve Sql - itsmylife38 - 24-03-2020

Paylaşım için teşekkür ederim.

UPS Kargo Barkod uygulaması için aşağıda ki örnek kodu C# olarak göndermiş bu yöntem ile yapabilirim sanırım.

Allah hepinizden razı olsun

Kod:
// Gönderi barkodumuzu *.jpeg formatına convert edip bilgisayarımıza kayıt ettim.
           byte[] b = Convert.FromBase64String(ship_png[0]);
           MemoryStream ms1 = new MemoryStream(b, 0, b.Length);
           ms1 = new System.IO.MemoryStream(b);
           Image img = System.Drawing.Image.FromStream(ms1);
           img.Save(@"c:\UPS\barkod.Jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
           img.Dispose();
           ms1.Close();

        // C sürücüsüne kayıt ettiğiniz gönderi barkodunu aşağıda ölçelerini verdiğimiz değerlerde print edilmeli ve
        // gönderilerecek paketin üstüne yapıştırılmalıdır. Barkod görüntüsünü aşağıdaki pixel boyutlarında yazdırmaya
           // dikkat edelim aksi taktirde UPS cihazları tarafından okunmaz.

           System.Drawing.Image image = System.Drawing.Image.FromFile(@"C:\UPS\barkod.jpeg");
           e.Graphics.DrawImage(image, 10, 10, 380, 540);