小弟初次涉及到数据库中的图片操作,用的是MS_SQL Server,在其中建立了Image类型的字段存储图片,界面上用的Express 的TdxDBGraphicEdit ,绑定数据后发现只能打开存储BMP格式的图片文件,其他的它们应该都支持的,那要如何操作呢?请执教!谢谢!
解决方案 »
- delphi 判定文本框输入值是否在0到10之间
- 浮点问题
- 如何实现动态分割窗体
- ehom收分
- 如何判断stringgrid当前行是否被选中
- 我用一个表存放当前的最大单据编号,怎样做得一个人读取该记录时不让别人读取啊,否则就会编号重复了。
- ★★★★★请问如何在DBD中删除表的字段名 在线等待
- 怎样用字符串(如000111001)为系统分配权限?请看这部分不完全正确的代码,请更正
- 可能是个很简单的问题:为什么我编译出的EXE文件很大?我只是想做一个无窗口的应用程序。
- 本人编了一个小程序,不知该怎么网上推广?供大家下载请大家出出主意
- 是delphi烂还是如何?高手请进
- intraweb有for delphi5的吗?delphi能做b/s程序吗?
void __fastcall TForm2::BitBtn2Click(TObject *Sender)
{
OpenPictureDialog1->FileName="";
if (OpenPictureDialog1->Execute())
{
String f=OpenPictureDialog1->FileName;
if (FileExists(f))
{
String ext=ExtractFileExt(f).LowerCase();
if (ext==".bmp" || ext==".jpg"|| ext==".jpeg")
{
String jpg=ChangeFileExt(ExtractFileName(f),".jpg");
TJPEGImage *j=new TJPEGImage;
if (ext==".bmp")
{
Graphics::TBitmap *b=new Graphics::TBitmap;
b->LoadFromFile(f);
j->Assign(b);
j->CompressionQuality=90;
j->Compress();
delete b;
}
else
{
TFileStream *fs=new TFileStream(f,fmOpenRead);
j->LoadFromStream(fs);
delete fs;
}
DataModule3->USRIFTable->Edit();
// DataModule1->ADODataSet1->Edit();
// DBEdit2->Text=jpg; TField *zd = DataModule3->USRIFTable->FieldByName("PHOTO");
// TField *zd=DataModule1->ADODataSet1->FieldByName("照片图像");
zd->Clear(); // 先清字段
TStream *bs=DataModule3->USRIFTable->CreateBlobStream(zd,bmWrite);
bs->Position=0;
j->SaveToStream(bs);
delete j;
delete bs;
DispJpg();
}
}
}
var
strm:Tmemorystream;
begin
strm:=tmemorystream.Create;
if not openpicturedialog1.Execute then exit;
image1.Picture.Bitmap.LoadFromFile(openpicturedialog1.filename);
image1.Picture.Bitmap.SaveToStream(strm);//将图像数据写入内存流
adotable1.Edit;
(adotable1.FieldByName('cus_image') as TBlobField).loadfromstream(strm);//从内存流中装载图像数据
//adotable1.FieldValues['cus_imagef']:=extractfilename(openpicturedialog1.filename);
strm.Free;
end;在上段代码中,可以装载BMP图像数据,若要装载JPG图像数据,则相应代码为:
procedure Tfrm_customer.btn_imageClick(Sender: TObject);
var
strm:Tmemorystream;
begin
strm:=tmemorystream.Create;
if not openpicturedialog1.Execute then exit;
TJPEGImage(image1.Picture.Graphic).LoadFromFile(openpicturedialog1.filename); //类型强制转换
TJPEGImage(image1.Picture.Graphic).SaveToStream(strm);//将图像数据写入内存流
adotable1.Edit;
(adotable1.FieldByName('cus_image') as TBlobField).loadfromstream(strm);//从内存流中装载图像数据
strm.Free;
end;
var
TmpFileStream : TFileStream;
begin
...
open;
locate...
edit;
if FileExists(trim(edtFileName.Text)) then begin
TmpFileStream := TFileStream.Create(trim(edtFileName.Text), fmOpenRead);
try
TBlobField(FieldByName('ImageField')).LoadFromStream(TmpFileStream);
Post;
finally
TmpFileStream.Free;
end;
end;
begin
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ADOTable1.Append;
TBlobField(ADOTable1.FieldByName('FImage')).LoadFromFile(OpenPictureDialog1.FileName);
ADOTable1.Post;
end;