200求助各位,通过马上结分!!! 现在本人碰到了一个大问题我想把图片通过解析成字符串的格式保存到数据库中,在客户端用必须用数据敏感控件显示。请教各位高手应该怎么做。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 关注啊,跟我的问题差不多啊帮你先转个粘看看思路unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, ADODB, ExtCtrls;type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; DataSource1: TDataSource; DBGrid1: TDBGrid; Image1: TImage; procedure ADODataSet1AfterScroll(DataSet: TDataSet); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementationprocedure LoadImageFromField(APicture: TPicture; AField: TBlobField);var ABitmap: TBitmap; AStream: TMemoryStream;begin if AField.IsNull then Exit; AStream := TMemoryStream.Create; try AField.SaveToStream(AStream); // Skip OLE storage header AStream.Seek(78, soFromBeginning); ABitmap := TBitmap.Create; try ABitmap.LoadFromStream(AStream); APicture.Graphic := ABitmap; finally ABitmap.Free; end; finally AStream.Free; end;end;{$R *.dfm}procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet);begin LoadImageFromField( Image1.Picture, DataSet.FieldByName('SDimage') as TBlobField );end;end. 数据库里用image保存图片这里有详细说明http://www.yesky.com/SoftChannel/72342371928440832/20030929/1733136_1.shtml 呵,因为TDBImage的LoadPicture的方法不能被继承,所以最后的方法就是,你自己写一个TDBIimageEx类,将系统的TDBImage类的代码复制过来,(代码改动非常小),主要是在LoadPicture方法中,加入自己的字符串转换代码就可以了,还涉及到一个字段类型判断的问题:系统是判断是Blob类型,才截稿(FDataLink.Field.IsBlob),你可以根据情况自己修改。 >>>>我想把图片通过解析成字符串的格式保存到数据库中,http://www.delphibbs.com/keylife/iblog_show.asp?xid=2765http://delphijl.99898.com/delphier/article/ShowArticle.asp?ArticleID=3function TForm1.GetPacketHead(FileName:String):integer;const FORMAT_DATALEN=512*1024;varFileStream:TFileStream;FormatStrings,StringsStream:TStringStream;iPos:integer;Mpg1Format:array[1..4]of byte;iResult:integer;beginif not(FileExists(FileName)) thenbeginResult:=$10184;Exit;end;FileStream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone);if FileStream.SizebeginResult:=$10184+8+2352*2;Exit;end;StringsStream:=TStringStream.Create('');StringsStream.CopyFrom(FileStream,FORMAT_DATALEN);FileStream.Free;FormatStrings:=TStringStream.Create('');Mpg1Format[1]:=$00;Mpg1Format[2]:=$00;Mpg1Format[3]:=$01;Mpg1Format[4]:=$bb;FormatStrings.Write(Mpg1Format,Sizeof(Mpg1Format));iPos:=Pos(FormatStrings.DataString,StringsStream.DataString);FormatStrings.Free;StringsStream.Free;if iPos<=0 theniResult:=$10184+8+2352*2elseiResult:=iPos-1+8+2352*2;Result:=iResult;end; 怎样判断dbGrideh 多选的情况下,选中巨行块(RECT)时 怎么样确定行数!!! 开始行和结束行 数据库的并发控制问题 关于Tchar组件的例子 如何获得并改变屏幕刷新率? 请教怎样检测是否有按键信息? 用了三年的C++Builder,但总是有一种不太爽的感觉,很想转用Dephi!!!! 求救,,,BDE问题!!! u2m(随波逐流,漂泊一生) 再请进2 Dll调用问题 如何做报表的预览? 调查问卷:请问大家所在的公司有用C/S三层结构的吗? 跪求 关于'类'
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, ExtCtrls;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Image1: TImage;
procedure ADODataSet1AfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
procedure LoadImageFromField(APicture: TPicture; AField: TBlobField);
var
ABitmap: TBitmap;
AStream: TMemoryStream;
begin
if AField.IsNull then
Exit; AStream := TMemoryStream.Create;
try
AField.SaveToStream(AStream); // Skip OLE storage header
AStream.Seek(78, soFromBeginning);
ABitmap := TBitmap.Create;
try
ABitmap.LoadFromStream(AStream);
APicture.Graphic := ABitmap;
finally
ABitmap.Free;
end;
finally
AStream.Free;
end;
end;{$R *.dfm}procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet);
begin
LoadImageFromField(
Image1.Picture,
DataSet.FieldByName('SDimage') as TBlobField
);
end;
end.
http://www.yesky.com/SoftChannel/72342371928440832/20030929/1733136_1.shtml
你自己写一个TDBIimageEx类,将系统的TDBImage类的代码复制过来,(代码改动非常小),主要是在LoadPicture方法中,加入自己的字符串转换代码就可以了,还涉及到一个字段类型判断的问题:系统是判断是Blob类型,才截稿(FDataLink.Field.IsBlob),你可以根据情况自己修改。
const FORMAT_DATALEN=512*1024;
var
FileStream:TFileStream;
FormatStrings,StringsStream:TStringStream;
iPos:integer;
Mpg1Format:array[1..4]of byte;
iResult:integer;
begin
if not(FileExists(FileName)) then
begin
Result:=$10184;
Exit;
end;
FileStream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone);
if FileStream.Sizebegin
Result:=$10184+8+2352*2;
Exit;
end;
StringsStream:=TStringStream.Create('');
StringsStream.CopyFrom(FileStream,FORMAT_DATALEN);
FileStream.Free;FormatStrings:=TStringStream.Create('');
Mpg1Format[1]:=$00;
Mpg1Format[2]:=$00;
Mpg1Format[3]:=$01;
Mpg1Format[4]:=$bb;
FormatStrings.Write(Mpg1Format,Sizeof(Mpg1Format));
iPos:=Pos(FormatStrings.DataString,StringsStream.DataString);
FormatStrings.Free;
StringsStream.Free;
if iPos<=0 then
iResult:=$10184+8+2352*2
else
iResult:=iPos-1+8+2352*2;
Result:=iResult;
end;