我在picture.loadfromfile(FFilename);
报错.

解决方案 »

  1.   

    在formcreate中注册TJPEGImage类,还要uses jpeg;单元procedure TForm1.FormCreate(Sender: TObject);
    begin
      RegisterClass(TJPEGImage);
    end;
      

  2.   

    或者新建个工程,加个Image控件,加载一次,把Image控件拷到当前工程,重加载一次,删掉。
      

  3.   

    谢谢大家的多次帮助,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;
      

  4.   

    每次到  if LowerCase(exeStr)='.jpg' then  //自动提取JPG图象
      begin
        picture.loadfromfile(FFilename);
    就出错.
      

  5.   

    但是加载*.bmp就没问题,而且我用另外个版本的类似程序加载该*.jpg也可以,就我的程序不行.