怎么把数据库里的TIF(BLOB)显示出来 ( 积分: 100 )

  • 主题发起人 主题发起人 kimsw
  • 开始时间 开始时间
K

kimsw

Unregistered / Unconfirmed
GUEST, unregistred user!
现在已把TIF存到数据库(mssql2000)
不知道如何把TIF(BLOB)显示出来
 
现在已把TIF存到数据库(mssql2000)
不知道如何把TIF(BLOB)显示出来
 
怎么存的, 就怎么取出来, 我想你是用流存的, 那就用流在读出来, 并显示到相应的控件上
 
你可以试一下dbimage啊,或者把流读出来用image显示啊,简单的很
 
看看这个呗,
http://www.delphibbs.com/keylife/iblog_show.asp?xid=3241
KeyLife富翁笔记
作者?: c_hk
标题?: BmpToTiff
 
另外装一个GraphicEx(http://www.2ccc.com 下)

或者用上面的方法,但是不是BmpToTiff,而是Tiff2Bmp
BMP2TIFF.ZIP
http://vcl.vclxx.org/DELPHI/D32FREE/BMP2TIFF.ZIP
將視窗點陣圖 .BMP 轉換儲存成 TIFF 6.0 格式的影像檔 ( 3.0 版,附原始程式碼 ) ,作者 : Wolfgang Krug。

TIFF2BMP.ZIP
http://vcl.vclxx.org/DELPHI/D32FREE/TIFF2BMP.ZIP
讀取並顯示 TIFF 6.0 格式的影像檔的單元 ( 1.0 版,附原始程式碼 ) ,作者 : Wolfgang Krug。
 
如果只是单纯的显示的话,直接用DBIMAGE连接到数据库中的对应字段就行了,不是,就另当别论了。
 
DBImage只支持Bitmap,连jpg都支持不了,更不用说Tiff了
 
我存的时候写的代码是这样的
with ADOCommand1 do
begin
CommandText := 'Insert Into test2(id,image,txt) VALUES(:id,:image,:txt)';
Parameters.ParamByName('id').Value := '123' ;
Parameters.ParamByName('image').Value := imgedit1.Image;
Parameters.ParamByName('txt').Value :=ReadFromText('c:/cmd.txt');
Execute;

end;
 
参考,tiff文件先转成bmp,因为不能双向,所以保存以后就都用bmp,

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2347110

http://www.delphibbs.com/delphibbs/dispq.asp?LID=1250424
标题: 请问各位:怎样在数据库的Image类型字段中插入图片?
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Close;
Table1.DatabaseName:='DBDEMOS';
Table1.TableName:='animals.dbf';
//使用Delphi自带的例子数据库.
Table1.Open;
end;

type
TGraphicHeader = record
Count: Word; { Fixed at 1 }
HType: Word; { Fixed at $0100 }
Size: Longint; { Size not including header }
end;

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
Var BlobStream:TBlobStream;
BMP:TBitmap;
JPEGs:TJPEGImage;
JPEGStream:TMemoryStream;
Header:TGraphicHeader;
begin
if Field.IsBlob then
begin
if not Field.IsNull then
begin
BlobStream:=TBlobStream.Create(TBlobField(Field),bmRead);
try
BlobStream.Read(Header,Sizeof(TGraphicHeader));
//先读一个流头,这个流头中记录有图片类型和图片大小.
//对于BMP,TBlobField.Assign(方法会自动保存这个记录,如果是JPG图片,则需要编程去处理.)
if (Header.Count<>1) or (Header.Size<>(BlobStream.Size-SizeOf(Header))) then
DBGrid1.Canvas.TextOut(Rect.Left,Rect.Top,'<ERROR GRAPHIC>')
//如果数据不符,则表示是错误数据.
else
begin
if (Header.HType=$0100) then//BMP图片
begin
BMP:=TBitmap.Create;
try
BMP.LoadFromStream(BlobStream);
//从头开始后面的数据.
DBGrid1.Canvas.StretchDraw(Rect,BMP);
//绘制在表格中.
finally
BMP.Free;
end;
end else if Header.HType=$0101 then//JPEG图片.
begin
JPEGs:=TJPEGImage.Create;
JPEGStream:=TMemoryStream.Create;
try
JPEGStream.CopyFrom(BlobStream,Header.Size);
//截取图片数据.
JPEGStream.Seek(0,0);
JPEGs.LoadFromStream(JPEGStream);
//把图片数据放入图片.
DBGrid1.Canvas.StretchDraw(Rect,JPEGs);
//在表格中绘图片.
finally
JPEGStream.Free;
JPEGs.Free;
end;
end;
end;
finally
BlobStream.Free;
end;
end else
DBGrid1.Canvas.TextOut(Rect.Left,Rect.Top,'<NULL>');
//空数据.
end else
DBGrid1.DefaultDrawDataCell(Rect,Field,State);
//其他格子.
end;

procedure TForm1.DBGrid1DblClick(Sender: TObject);
Var Picture:TPicture;
BlobStream:TBlobStream;
MemStream:TMemoryStream;
Header:TGraphicHeader;
begin
if DBGrid1.SelectedField.IsBlob then
begin
if OpenPictureDialog1.Execute then
begin
try
Picture:=TPicture.Create;
try
Picture.LoadFromFile(OpenPictureDialog1.FileName);
if Picture.Graphic is TBitmap then
begin
DBGrid1.DataSource.DataSet.Edit;
TBlobField(DBGrid1.SelectedField).Assign(Picture);
//这个语句会自动处理流头的数据,其中BMP类型的Header.HType:=$0100;
DBGrid1.DataSource.DataSet.Post;
end else if Picture.Graphic is TJPEGImage then
//JPG图片.
begin
MemStream:=TMemoryStream.Create;
try
TJPEGImage(Picture.Graphic).SaveToStream(MemStream);
//存入临时流.
Header.Count:=1;
Header.HType:=$0101;
//JPG数据的Header.HType:=$0101当然也可以定为其他不等于$0100的值.
Header.Size:=MemStream.Size;
DBGrid1.DataSource.DataSet.Edit;
BlobStream:=TBlobStream.Create(TBlobField(DBGrid1.SelectedField),bmWrite);
//创建Blob流.
try
MemStream.Seek(0,0);
BlobStream.Write(Header,sizeof(Header));
//先写入流头.
BlobStream.CopyFrom(MemStream,MemStream.Size);
//写入图片数据.
finally
BlobStream.Free;
DBGrid1.DataSource.DataSet.Post;
end;
finally
MemStream.Free;
end;
end;
finally
Picture.Free;
end;
Except
end;
end;
end;
end;
 
多人接受答案了。
 

Similar threads

后退
顶部