Delphi Can
panel görüntüsünü alıp veritabanına kaydetme - 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ığı: panel görüntüsünü alıp veritabanına kaydetme (/showthread.php?tid=4791)



panel görüntüsünü alıp veritabanına kaydetme - erdogan - 03-05-2020

Arkadaşlar, 

formumda bir panel var görüntüsünü alıp veritabanına nasıl kaydedebilirim ?

aşağıdaki kod ile deniyorum fakat,   TBlobField(Panel1.Handle).SaveToStream(Stream); bu satırda hata alıyorum.

Teşekkürler.



procedure TForm1.Button2Click(Sender: TObject);
var
 Dosya: TMemoryStream;
 Jpeg: TJpegImage;
 Stream: TMemoryStream;
begin
 Jpeg := TJpegImage.Create();
 try
   Stream := TMemoryStream.Create();
   try
     TBlobField(Panel1.Handle).SaveToStream(Stream);
     Stream.Position := 0;
     Jpeg.LoadFromStream(Stream);
     Image1.Picture.Assign(Jpeg);
   finally
     Stream.Free();
   end;
 finally
   Jpeg.Free();
 end;
end;



panel görüntüsünü alıp veritabanına kaydetme - mrmarman - 03-05-2020

Panel1.Handle değil de veritabanınızın resmi sakladığı field olmasın orası? FieldbyName('resim') gibisinden...


Cvp: panel görüntüsünü alıp veritabanına kaydetme - erdogan - 03-05-2020

(03-05-2020, Saat: 11:51)mrmarman Adlı Kullanıcıdan Alıntı: Panel1.Handle değil de veritabanınızın resmi sakladığı field olmasın orası? FieldbyName('resim') gibisinden...

Merhaba,

Evet öylede panelin resmini nasıl alabilirim hocam ?

Teşekkürler.


panel görüntüsünü alıp veritabanına kaydetme - mrmarman - 03-05-2020

Idea  Buradan yürüyebilirsiniz...

procedure TForm1.Button2Click(Sender: TObject);
var
  PanelDC : HDC;
  Bitmap  : TBitmap;
begin
  Bitmap  := TBitmap.Create;
  try
    Bitmap.PixelFormat := pf24bit;
    Bitmap.SetSize( Panel1.Width, Panel1.Height );

    PanelDC := GetDC( Panel1.Handle );
    BitBlt( Bitmap.Canvas.Handle, 0, 0, Panel1.Width, Panel1.Height, PanelDC, 0, 0, SRCCOPY );
    ReleaseDC( Panel1.handle, PanelDC );

    Image1.Picture.Graphic := Bitmap;
  finally
    Bitmap.Free;
  end;
end;


Burada JPG olarak çıktı almak istiyorsanız  Jpeg.Assign( Bitmap ); ile içine alıp Jpeg.SaveToFile olarak Jpeg formatında kayıt yapabilirsiniz. 
Çıktılarınız hangi format olursa olsun altyapıyı Bitmap kurarsanız başınız ağrımaz.

Eklemeyi unutmuşum :  Idea
Yukarıdaki işlem VCL formlar için geçerli.

FMX olsaydı ( FMX Windows veya Android ) o zaman iş çok daha pratik idi..

procedure TForm1.Button2Click(Sender: TObject);
begin
 Image1.Bitmap := Panel1.MakeScreenshot;
end;



Cvp: panel görüntüsünü alıp veritabanına kaydetme - erdogan - 03-05-2020

(03-05-2020, Saat: 12:44)mrmarman Adlı Kullanıcıdan Alıntı: Idea  Buradan yürüyebilirsiniz...

procedure TForm1.Button2Click(Sender: TObject);
var
  PanelDC : HDC;
  Bitmap  : TBitmap;
begin
  Bitmap  := TBitmap.Create;
  try
    Bitmap.PixelFormat := pf24bit;
    Bitmap.SetSize( Panel1.Width, Panel1.Height );

    PanelDC := GetDC( Panel1.Handle );
    BitBlt( Bitmap.Canvas.Handle, 0, 0, Panel1.Width, Panel1.Height, PanelDC, 0, 0, SRCCOPY );
    ReleaseDC( Panel1.handle, PanelDC );

    Image1.Picture.Graphic := Bitmap;
  finally
    Bitmap.Free;
  end;
end;


Burada JPG olarak çıktı almak istiyorsanız  Jpeg.Assign( Bitmap ); ile içine alıp Jpeg.SaveToFile olarak Jpeg formatında kayıt yapabilirsiniz. 
Çıktılarınız hangi format olursa olsun altyapıyı Bitmap kurarsanız başınız ağrımaz.

Eklemeyi unutmuşum :  Idea
Yukarıdaki işlem VCL formlar için geçerli.

FMX olsaydı ( FMX Windows veya Android ) o zaman iş çok daha pratik idi..

procedure TForm1.Button2Click(Sender: TObject);
begin
 Image1.Bitmap := Panel1.MakeScreenshot;
end;

Çok teşekkür ederim hocam oldu.