使用流TStream从窗体文件中读出图片,怎样识别该图片是什么格式? 你在存储的时候加上一个字段,用来存储图片的类型,如'.jpg',读入的的时候在判断不就型了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这与文件格式有关,建议你去查一下关于这些文件的格式!看看www.csdn.net上文件格式大全的介绍http://www.csdn.net/dev/Format/ 读取流的前两个字节,如果是'BM'就是bmp啦 先定义一个Image1: TImage然后Image1.picture.graphic is TBitmap or TjpegImage不知道行不行:) var pic:TPicturebegin pic.LoadFromStream(theStream); ...end;在pic.Graphic中会创建正确的类型的TGraphic,条件是在用的程序中,该类型应已经注册.如在任一单元中uses Jpeg就可以识别JPEG格式了. 我找到TPictureEx的代码了,把它加到你的Graphic单元去:interface节: TPictureEx = Class(TPicture) public procedure SaveToStream(Stream: TStream); procedure LoadFromStream(Stream: TStream); end;implementation节:{ TPictureEx }resourcestring SUnknownClassName = 'Unknown Class Name (%s)';procedure TPictureEx.LoadFromStream(Stream: TStream);var GraphClassName: String; ClassNameLen: Integer; GraphClass: TGraphicClass; NewGraphic: TGraphic;begin Stream.Read(ClassNameLen,Sizeof(ClassNameLen)); GraphClassName := StringOfChar(#0,ClassNameLen); Stream.Read(GraphClassName[1],ClassNameLen); GraphClass := FileFormats.FindClassName(GraphClassName); if GraphClass = nil then raise EInvalidGraphic.CreateFmt(SUnknownClassName, [GraphClassName]); NewGraphic := GraphClass.Create; try NewGraphic.OnProgress := Progress; NewGraphic.LoadFromStream(Stream); except NewGraphic.Free; raise; end; Graphic:=NewGraphic;end;procedure TPictureEx.SaveToStream(Stream: TStream);var GraphClassName: String; ClassNameLen: Integer;begin if Graphic<> nil then begin GraphClassName := Graphic.ClassName; ClassNameLen := Length(GraphClassName); Stream.Write(ClassNameLen,Sizeof(ClassNameLen)); Stream.Write(GraphClassName[1],ClassNameLen); Graphic.SaveToStream(Stream); end;end;然后把这个单元加入到你的工程中,打开调试选项编译一次,把生成的Graphic.dcu拷贝到...\Delphi5\lib下;再关闭调试选项编译,把生成的Graphic.dcu拷贝到...\Delphi5\lib\debug下. 为什么 输入 0.000015 保存到数据后, 再查询会 显示 1.5E-5 ???? 网络控制 如何将字符串写入到TMemoryStream流中 在代码中把DBGrid.options中的dgRowselect由false改为true,请贴出代码. 用delphi7如何实现以下功能。 怎么D7里没WINSOCKET控件的? 问题二:有没有支持可以修改Jpg图片的Image控件: 水平考试很快就到了、但脑里一片空白 关于检测PC是否在线的函授 InternetGetConnectedState **急,200分** 关于ICS(类FastNet)控件的Post问题! 一个游戏问题 超级菜题
看看www.csdn.net上文件格式大全的介绍
http://www.csdn.net/dev/Format/
不知道行不行:)
pic:TPicture
begin
pic.LoadFromStream(theStream);
...
end;
在pic.Graphic中会创建正确的类型的TGraphic,条件是在用的程序中,该类型应已经注册.如在任一单元中uses Jpeg就可以识别JPEG格式了.
interface节:
TPictureEx = Class(TPicture)
public
procedure SaveToStream(Stream: TStream);
procedure LoadFromStream(Stream: TStream);
end;
implementation节:
{ TPictureEx }
resourcestring
SUnknownClassName = 'Unknown Class Name (%s)';procedure TPictureEx.LoadFromStream(Stream: TStream);
var
GraphClassName: String;
ClassNameLen: Integer;
GraphClass: TGraphicClass;
NewGraphic: TGraphic;
begin
Stream.Read(ClassNameLen,Sizeof(ClassNameLen));
GraphClassName := StringOfChar(#0,ClassNameLen);
Stream.Read(GraphClassName[1],ClassNameLen);
GraphClass := FileFormats.FindClassName(GraphClassName);
if GraphClass = nil then
raise EInvalidGraphic.CreateFmt(SUnknownClassName, [GraphClassName]); NewGraphic := GraphClass.Create;
try
NewGraphic.OnProgress := Progress;
NewGraphic.LoadFromStream(Stream);
except
NewGraphic.Free;
raise;
end;
Graphic:=NewGraphic;
end;procedure TPictureEx.SaveToStream(Stream: TStream);
var
GraphClassName: String;
ClassNameLen: Integer;
begin
if Graphic<> nil then
begin
GraphClassName := Graphic.ClassName;
ClassNameLen := Length(GraphClassName);
Stream.Write(ClassNameLen,Sizeof(ClassNameLen));
Stream.Write(GraphClassName[1],ClassNameLen);
Graphic.SaveToStream(Stream);
end;
end;然后把这个单元加入到你的工程中,打开调试选项编译一次,把生成的Graphic.dcu拷贝到...\Delphi5\lib下;再关闭调试选项编译,把生成的Graphic.dcu拷贝到...\Delphi5\lib\debug下.