picture.loadfromfile(FFilename);报错jpeg error #52哪位大哥碰到过没有

birdhzx 2003-10-19 11:01:34
我在picture.loadfromfile(FFilename);
报错.
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_liuyang 2003-10-20
  • 打赏
  • 举报
回复
看看上面的方法如何了
该可以解决的
birdhzx 2003-10-20
  • 打赏
  • 举报
回复
但是加载*.bmp就没问题,而且我用另外个版本的类似程序加载该*.jpg也可以,就我的程序不行.
birdhzx 2003-10-20
  • 打赏
  • 举报
回复
每次到

if LowerCase(exeStr)='.jpg' then //自动提取JPG图象
begin
picture.loadfromfile(FFilename);
就出错.
birdhzx 2003-10-20
  • 打赏
  • 举报
回复
谢谢大家的多次帮助,RegisterClass(TJPEGImage);还是不可以,报同样的错

我的程序没用到TJPEGImage,
MyImage:TAllImage;
MyLabel:TLabel;
SPos,i, j:integer;
NumOfDICOMFrame:integer;
FileBuf:TStringList;
ImageNum:Integer;
imgPath:string;
begin
for i := scbImageList.ComponentCount - 1 downto 0 do
scbImageList.Components[i].free;


//图象列表

// if CurrentExam.ImagePath[length(CurrentExam.ImagePath)]<>'\' then
// CurrentExam.ImagePath:=CurrentExam.ImagePath+'\'; //得到图像路径
//返回目录下所有文件名 ,数目
CurrentExam.ImagePath:='C:\pacs5.5\exe\backimg\';\\测试用
FileBuf:= tstringlist.Create();
FindFiles(CurrentExam.ImagePath,FileBuf,ImageNum);
//图象数目
j:=1;
for i := 1 to ImageNum do
begin
//为图像预留空间
MyImage := TAllImage.Create(scbImageList);
MyImage.Parent :=scbImageList;
MyImage.Hint := CurrentExam.ImagePath+FileBuf[i-1]; //图像的提示性文字是该图像的文件名
MyImage.Filename:=MyImage.Hint;

SPos := scbImageList.VertScrollBar.ScrollPos;
MyImage.TOP := (j - 1) * 75+25*j -sPos;
MyImage.Left := 10;
MyImage.Height := 75;
MyImage.Width := 100;
MyImage.Stretch := true;

MyImage.Filename:=MyImage.Hint;
MyImage.GetFirstFrame;

MyImage.ShowHint := true;
MyImage.OnClick := OnImgClick; {---加图象到报表中---}
j:= j + 1;

end;

MyImage.Free;
================================
GetFirstFrame;定义在TAllImage中.
TAllImage = class(TImage)
private
{ Private declarations }
FFileName:string;
FFrameRate:integer;
FPlayLoop:boolean;
FFrameNum:integer;
pMemBegin,pMemPos:^Byte;
FCurrentFrame:integer;
FState:integer;
SysTimer:TTimer;
procedure SysTimerTick(Sender: TObject);
protected
{ Protected declarations }
procedure OpenBuffer(BufSize:integer);
procedure FreeBuffer;
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
function GetFirstFrame:boolean;
procedure MP4Play;
procedure MP4Pause;
procedure MP4Stop;
procedure MP4Open;
procedure MP4Close;
published
{ Published declarations }
Property Height;
property Width;
property Top;
property Left;
property Filename:string read FFilename write FFilename;
property FrameRate:integer read FFrameRate write FFrameRate;
property PlayLoop:boolean read FPlayLoop write FPlayLoop;
end;


function TAllImage.GetFirstFrame:boolean;
var
// ShowFirstFrame:TGetFirstFrame;
// DllHandle:THandle;
exeStr:String;
bmp:TBitmap;
tag:boolean;

fs:TMemoryStream;
Buffer:Pointer;
MyJpeg : TFastDIB;
// pDC:HWND;
ImgSize:integer;
DcmClass:TMyDicomClass;
T1:TBitmap;
pDC: HDC;
begin
if trim(FFilename)='' then
begin
result:=false;
exit;
end;
if not(Fileexists(FFilename)) then
begin
result:=false;
exit;
end;
exeStr:=ExtractFileExt(FFilename);
if LowerCase(exeStr)='.bmp' then //自动提取BMP图象
begin
picture.loadfromfile(FFilename);
result:=true;
exit;
end;
if LowerCase(exeStr)='.jpg' then //自动提取JPG图象
begin
picture.loadfromfile(FFilename);
result:=true;
exit;
end;
if LowerCase(exeStr)='.avi' then //自动提取JPG图象
begin
bmp:=TBitmap.Create;
try
tag:=GetAviFrame(FFilename,1,bmp);
picture.Bitmap.Assign(bmp);
finally
bmp.free;
end;
result:=true;
exit;
end;
kuan 2003-10-19
  • 打赏
  • 举报
回复
或者新建个工程,加个Image控件,加载一次,把Image控件拷到当前工程,重加载一次,删掉。
huojiehai 2003-10-19
  • 打赏
  • 举报
回复
在formcreate中注册TJPEGImage类,还要uses jpeg;单元

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClass(TJPEGImage);
end;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧