Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 2.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
xe8 resim ekleme, delphi7 de gösterme sql
#1
Arkadaşlar,

XE8 de androide resmi aşağıdaki kod ile sql kaydediyorum,

procedure TForm1.KAYDETClick(Sender: TObject);
var
  Field: TBlobField;
  RESIM: TStream;
begin
  if DEVRIYE_HAREKETLERI_DB.Active and (Image1.Bitmap <> nil) then
  begin
    DEVRIYE_HAREKETLERI_DB.Insert;
    Field := TBlobField(DEVRIYE_HAREKETLERI_DB.FieldByName('RESIM1'));
    RESIM := DEVRIYE_HAREKETLERI_DB.CreateBlobStream(Field, bmWrite);
    try
      Image1.Bitmap.SaveToStream(RESIM);
    finally
      RESIM.Free;
      DEVRIYE_HAREKETLERI_DB.Post;
    end;
  end;
end;


Bu kod ilede Delphi 7 de göstermek istiyorum ama hata veriyor ? SQL2012 de alan alan türü "image"

procedure TForm1.btn1Click(Sender: TObject);
var
  Field: TBlobField;
  RESIM: TStream;
  Jpg: TJPEGImage;
begin
  if QRY_RESIMLER_DB.Active then
  begin
    Field := TBlobField(QRY_RESIMLER_DB.FieldByName('RESIM1'));
    RESIM := QRY_RESIMLER_DB.CreateBlobStream(Field, bmRead);
    Jpg := TJPEGImage.Create;
    try
      Jpg.LoadFromStream(RESIM);
      img1.Picture.Graphic := Jpg;
    finally
      img1.Free;
      RESIM.Free;
    end;
  end;
end;

hata mesajı
6mGy5E.png


acaba yanlış olan nedir ?

teşekkürler
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#2
selam,
veritabanına doğru kaydettiğinden eminmisiniz peki ? ben genelde böyle durumda veritabanı editoru ile belgeyi blob alandan export yapıp dosya türü ne ise o isimde kaydedip windows ta açmayı denerim eğer açarsa doğru kaydetmiştir derim.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#3
Merhaba,
Yaşadığın problem, siz görüntüyü BMP olarak kaydediyorsunuz fakat görüntülemek istediğinizde görüntüyü JPG olarak kabul edip görüntülemeye çalışıyorsunuz.
Bir kaç seçenek sunayım gelen cevaplara göre değerlendirmeyi yaparsınız.
1- Görüntüyü convert edip, tüm görüntüleri JPG olarak kayıt edebilir ve aynı kodunuzla görüntüleyebilirsiniz.
2- Görüntüyü kayıt ederken tablonuzda 2. bir alana uzantısını alır, görüntülemek istediğinizde de bu uzantıyı referans gösterebilirsiniz.
3- Resmin Datasını alarak kayıt yapar, yine bu buradaki datayı kullanarak görüntüleme yapabilirsiniz.

İyi Çalışmalar.
Cevapla
#4
hazırcı değilim tabi ama örnek bir kod yazabilirmisiniz Smile

teşekkürler
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#5
(13-10-2016, Saat: 12:58)erdogan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olhazırcı değilim tabi ama örnek bir kod yazabilirmisiniz Smile

teşekkürler

procedure TForm1.btn1Click(Sender: TObject);
var
 Field: TBlobField;
 RESIM: TStream;
 Jpg: TJPEGImage;
begin
 if QRY_RESIMLER_DB.Active then
 begin
   Field := TBlobField(QRY_RESIMLER_DB.FieldByName('RESIM1'));
   RESIM := QRY_RESIMLER_DB.CreateBlobStream(Field, bmRead);
   Jpg := TJPEGImage.Create;
   try
     Jpg.LoadFromStream(RESIM);
     img1.Picture.Graphic := Jpg;
   finally
     img1.Free;
     RESIM.Free;
   end;
 end;
end;

Yukarıdaki kısmı BMP olarak ayarlarsanız çalışacaktır.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#6
(13-10-2016, Saat: 12:58)erdogan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olhazırcı değilim tabi ama örnek bir kod yazabilirmisiniz Smile

teşekkürler


Ekte bir örnek var umarım yardımcı olur.
kod kısmıda aşağıda yeralmaktadır.
Özetlemek gerekirse, Timage nesnesine alacağımız resim uzantısı alınıyor, eğer bmp uzantılı ise Resimcevi Procedure devreye girer, resmimizi JPG formatına çevirir ve  ekranda göstermektedir.


Unit1.dfm
object Form1: TForm1
 Left = 623
 Top = 329
 Caption = 'Form1'
 ClientHeight = 352
 ClientWidth = 537
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object BitBtn1: TBitBtn
   Left = 399
   Top = 25
   Width = 27
   Height = 25
   Caption = '...'
   TabOrder = 0
   OnClick = BitBtn1Click
 end
 object lblopicture: TLabeledEdit
   Left = 8
   Top = 26
   Width = 385
   Height = 24
   EditLabel.Width = 128
   EditLabel.Height = 16
   EditLabel.Caption = 'Dosyadan Resim Y'#252'kle'
   EditLabel.Font.Charset = DEFAULT_CHARSET
   EditLabel.Font.Color = clWindowText
   EditLabel.Font.Height = -13
   EditLabel.Font.Name = 'Tahoma'
   EditLabel.Font.Style = []
   EditLabel.ParentFont = False
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -13
   Font.Name = 'Tahoma'
   Font.Style = [fsBold]
   ParentFont = False
   ReadOnly = True
   TabOrder = 1
 end
 object lbuzanti: TLabeledEdit
   Left = 432
   Top = 25
   Width = 97
   Height = 24
   EditLabel.Width = 81
   EditLabel.Height = 16
   EditLabel.Caption = 'Dosya uzant'#305's'#305
   EditLabel.Font.Charset = DEFAULT_CHARSET
   EditLabel.Font.Color = clWindowText
   EditLabel.Font.Height = -13
   EditLabel.Font.Name = 'Tahoma'
   EditLabel.Font.Style = []
   EditLabel.ParentFont = False
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -13
   Font.Name = 'Tahoma'
   Font.Style = [fsBold]
   ParentFont = False
   TabOrder = 2
 end
 object Panel1: TPanel
   Left = 8
   Top = 56
   Width = 521
   Height = 288
   BevelOuter = bvNone
   TabOrder = 3
   object Image1: TImage
     Left = 0
     Top = 0
     Width = 521
     Height = 288
     Align = alClient
     Center = True
     Stretch = True
     ExplicitLeft = 29
     ExplicitTop = 4
     ExplicitWidth = 282
     ExplicitHeight = 241
   end
 end
end

Unit1.pas
unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons,
 Vcl.ExtDlgs,Vcl.Imaging.jpeg;

type
 TForm1 = class(TForm)
   BitBtn1: TBitBtn;
   lblopicture: TLabeledEdit;
   lbuzanti: TLabeledEdit;
   Panel1: TPanel;
   Image1: TImage;
   procedure BitBtn1Click(Sender: TObject);
 private
   procedure ResimCeviri(resimyolu: STRING);
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.ResimCeviri(resimyolu: STRING);
var JPG: TJpegImage;
   img:TImage;
begin
 JPG   := TJpegImage.Create;
 img:=TImage.Create(Self);
 img.Picture.LoadFromFile(resimyolu);
 JPG.Assign(img.Picture.Bitmap );
 img.Free;
 JPG.CompressionQuality  := 100;
 JPG.Compress;
 JPG.SaveToFile(ExtractFilePath(Application.ExeName)+'Resim.JPG');
 Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'Resim.JPG');
 DeleteFile(ExtractFilePath(Application.ExeName)+'Resim.JPG');
 JPG.Free;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 ac :TOpenPictureDialog;
begin
 ac:=TOpenPictureDialog.Create(nil);
 with ac do
 try
   Filter :='Resim Dosyası (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp';
   Title  :='Resmi Seç...';
   if Execute then
   begin
     lblopicture.Text:=FileName;
     lbuzanti.Text:=ExtractFileExt(FileName);
     if lbuzanti.Text='.bmp' then
       ResimCeviri(FileName)
     else
     Image1.Picture.LoadFromFile(FileName);
   end;
 finally
   FreeAndNil(ac);
 end;
end;

end.


Ek Dosyalar
.zip   resimsec.zip (Dosya Boyutu: 66,68 KB / İndirme Sayısı: 3)
Cevapla
#7
(13-10-2016, Saat: 14:59)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(13-10-2016, Saat: 12:58)erdogan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olhazırcı değilim tabi ama örnek bir kod yazabilirmisiniz Smile

teşekkürler


Ekte bir örnek var umarım yardımcı olur.
kod kısmıda aşağıda yeralmaktadır.
Özetlemek gerekirse, Timage nesnesine alacağımız resim uzantısı alınıyor, eğer bmp uzantılı ise Resimcevi Procedure devreye girer, resmimizi JPG formatına çevirir ve  ekranda göstermektedir.


Unit1.dfm
object Form1: TForm1
 Left = 623
 Top = 329
 Caption = 'Form1'
 ClientHeight = 352
 ClientWidth = 537
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object BitBtn1: TBitBtn
   Left = 399
   Top = 25
   Width = 27
   Height = 25
   Caption = '...'
   TabOrder = 0
   OnClick = BitBtn1Click
 end
 object lblopicture: TLabeledEdit
   Left = 8
   Top = 26
   Width = 385
   Height = 24
   EditLabel.Width = 128
   EditLabel.Height = 16
   EditLabel.Caption = 'Dosyadan Resim Y'#252'kle'
   EditLabel.Font.Charset = DEFAULT_CHARSET
   EditLabel.Font.Color = clWindowText
   EditLabel.Font.Height = -13
   EditLabel.Font.Name = 'Tahoma'
   EditLabel.Font.Style = []
   EditLabel.ParentFont = False
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -13
   Font.Name = 'Tahoma'
   Font.Style = [fsBold]
   ParentFont = False
   ReadOnly = True
   TabOrder = 1
 end
 object lbuzanti: TLabeledEdit
   Left = 432
   Top = 25
   Width = 97
   Height = 24
   EditLabel.Width = 81
   EditLabel.Height = 16
   EditLabel.Caption = 'Dosya uzant'#305's'#305
   EditLabel.Font.Charset = DEFAULT_CHARSET
   EditLabel.Font.Color = clWindowText
   EditLabel.Font.Height = -13
   EditLabel.Font.Name = 'Tahoma'
   EditLabel.Font.Style = []
   EditLabel.ParentFont = False
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -13
   Font.Name = 'Tahoma'
   Font.Style = [fsBold]
   ParentFont = False
   TabOrder = 2
 end
 object Panel1: TPanel
   Left = 8
   Top = 56
   Width = 521
   Height = 288
   BevelOuter = bvNone
   TabOrder = 3
   object Image1: TImage
     Left = 0
     Top = 0
     Width = 521
     Height = 288
     Align = alClient
     Center = True
     Stretch = True
     ExplicitLeft = 29
     ExplicitTop = 4
     ExplicitWidth = 282
     ExplicitHeight = 241
   end
 end
end

Unit1.pas
unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons,
 Vcl.ExtDlgs,Vcl.Imaging.jpeg;

type
 TForm1 = class(TForm)
   BitBtn1: TBitBtn;
   lblopicture: TLabeledEdit;
   lbuzanti: TLabeledEdit;
   Panel1: TPanel;
   Image1: TImage;
   procedure BitBtn1Click(Sender: TObject);
 private
   procedure ResimCeviri(resimyolu: STRING);
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.ResimCeviri(resimyolu: STRING);
var JPG: TJpegImage;
   img:TImage;
begin
 JPG   := TJpegImage.Create;
 img:=TImage.Create(Self);
 img.Picture.LoadFromFile(resimyolu);
 JPG.Assign(img.Picture.Bitmap );
 img.Free;
 JPG.CompressionQuality  := 100;
 JPG.Compress;
 JPG.SaveToFile(ExtractFilePath(Application.ExeName)+'Resim.JPG');
 Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'Resim.JPG');
 DeleteFile(ExtractFilePath(Application.ExeName)+'Resim.JPG');
 JPG.Free;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 ac :TOpenPictureDialog;
begin
 ac:=TOpenPictureDialog.Create(nil);
 with ac do
 try
   Filter :='Resim Dosyası (*.jpg;*.jpeg;*.bmp)|*.jpg;*.jpeg;*.bmp';
   Title  :='Resmi Seç...';
   if Execute then
   begin
     lblopicture.Text:=FileName;
     lbuzanti.Text:=ExtractFileExt(FileName);
     if lbuzanti.Text='.bmp' then
       ResimCeviri(FileName)
     else
     Image1.Picture.LoadFromFile(FileName);
   end;
 finally
   FreeAndNil(ac);
 end;
end;

end.

cevabınız için çok teşekkür ederim fakat androitte resim çekip image nesnesine atıyorum bunuda sql e kaydediyorum kaydettiğim resmide delphi 7 de başka bir uygulamada göstermek istiyorum yani bu kod işime yaramıyor yinede teşekkür ederim.

halla araştırıyorum..

(13-10-2016, Saat: 13:57)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(13-10-2016, Saat: 12:58)erdogan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olhazırcı değilim tabi ama örnek bir kod yazabilirmisiniz Smile

teşekkürler

procedure TForm1.btn1Click(Sender: TObject);
var
 Field: TBlobField;
 RESIM: TStream;
 Jpg: TJPEGImage;
begin
 if QRY_RESIMLER_DB.Active then
 begin
   Field := TBlobField(QRY_RESIMLER_DB.FieldByName('RESIM1'));
   RESIM := QRY_RESIMLER_DB.CreateBlobStream(Field, bmRead);
   Jpg := TJPEGImage.Create;
   try
     Jpg.LoadFromStream(RESIM);
     img1.Picture.Graphic := Jpg;
   finally
     img1.Free;
     RESIM.Free;
   end;
 end;
end;

Yukarıdaki kısmı BMP olarak ayarlarsanız çalışacaktır.

denedim olmadı belki ben yanlış yapıyorum siz düzeltip atabilirmisiniz. ?

teşekkürler
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#8
 jpg : TJPGImage; 
 ve ilgili olan satırları sil.
image1 ile  RESIM nesnesini LoadStream ile yükle.

Bu şekilde kayıt biçiminin hangi formatta olduğu önemli değil. Desteklensin yeter.

Denemedim ve Firemonkeyde çalışacağını düşünüyorum. VCL için denemen lazım.

Yer tasarrufu için kayıtı JPEG  veya benzeri yapman lazım.. FireMonkey ileaşağıdakini kullanabilirsin. jpg yerine png veya desteklenen farklı uzantıları uygulayabilirsin.

FMX.Graphics, FMX.Surfaces, FMX.Types, FMX.Consts;

procedure SaveJpegToStream(Bitmap: TBitmap; Stream: TStream);
var
 Surf: TBitmapSurface;
begin
 Surf := TBitmapSurface.Create;
 try
   Surf.Assign(Bitmap);
   if not TBitmapCodecManager.SaveToStream(Stream, Surf, '.jpg') then
     raise EBitmapSavingFailed.Create(SBitmapSavingFailed);
 finally
   Surf.Free;
 end;
end;
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#9
cevabınız için teşekkür ederim,

TUTANAK_DETAYI_DB.FieldByName('RESIM1')

bu kısmı neresine yazayım anlamadım valla Sad
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#10
(13-10-2016, Saat: 17:37)erdogan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olcevabınız için çok teşekkür ederim fakat androitte resim çekip image nesnesine atıyorum bunuda sql e kaydediyorum kaydettiğim resmide delphi 7 de başka bir uygulamada göstermek istiyorum yani bu kod işime yaramıyor yinede teşekkür ederim.

halla araştırıyorum..

Yanlış yorumladım sanırım sorunuzu, Tekrar tekrar okuyunca şöyle bir yorum getirdim sorunuza,veritabanındaki resimleri tekrar kayıt yapma şansınız olmadığı için mevcut resimleri görüntülemek istiyorsunuz. ben ise kayıt yapmayı açıklamaya çalıştım.

Aşağıdaki kodlar, Delphi de  sürüm farklılığı olmaz ise işini görecektir.

procedure getPicture(image:TImage; DataSource1: TDataSource;Field : STRING);
var
 memStream : TMemoryStream;
 FirstBytes: AnsiString;
 Graphic   : TGraphic;
 bm        :Tbitmap;
begin

  memStream := TMemoryStream.Create;
  (DataSource1.Dataset.FieldbyName(Field) as TBlobfield).SaveToStream(memStream);
  memStream.Seek(0, 0);
  SetLength(FirstBytes, 8);
  memstream.Read(FirstBytes[1], 8);
  bm:=TBitmap.Create;
  if Copy(FirstBytes, 1, 2) = 'BM' then
    Graphic := TBitmap.Create
  else
  if FirstBytes = #137'PNG'#13#10#26#10 then
    Graphic := TPngImage.Create
  else
  if Copy(FirstBytes, 1, 3) =  'GIF' then
    Graphic := TGIFImage.Create
  else
  if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
  Graphic := TJPEGImage.Create;
  if Assigned(Graphic) then
  begin
    try
      memstream.Seek(0, soFromBeginning);
      Graphic.LoadFromStream(memstream);
      BM.Assign(Graphic);
      Image.Visible:=true;
      image.Picture.Assign(bm);
    except
    end;
    Graphic.Free;
  end;
  memStream.Free;
  bm.Free;
end;
procedure TForm1.QRY_RESIMLER_DBAfterScroll(DataSet: TDataSet);
begin  
 getPicture(Photo,DBGrid1.DataSource,'RESIM1')
end;
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Karakter ekleme dilo 6 229 21-07-2018, Saat: 15:27
Son Yorum: Halil Han Badem
  ios resim galerisi şeklinde yapı kurgusu nasıl olmalı pro_imaj 7 461 14-06-2018, Saat: 13:05
Son Yorum: bilrax
Question Listview Edit Ekleme ve Button Yüksekliği Ayarı elixir84 11 589 22-05-2018, Saat: 21:51
Son Yorum: mcuyan
  androidde birden fazla resim seçme erdogan 1 259 27-04-2018, Saat: 11:42
Son Yorum: Fesih ARSLAN
Question memo uzun veri ekleme sıkıntısı BY-HAYALET 4 402 06-04-2018, Saat: 17:04
Son Yorum: BY-HAYALET



Konuyu Okuyanlar: 1 Ziyaretçi