先转换为BMP,再用CopyRect方法拷贝你要的区域

解决方案 »

  1.   

    显示图片的左上角1/4:
    use 
      jpeg
    ...procedure TForm1.Button1Click(Sender: TObject);
    var
      MyJpeg: TJpegImage;
      bitmap: Tbitmap;
      rect1,rect2:Trect;
    begin
      bitmap:=tbitmap.Create;
      MyJpeg:= TJpegImage.Create;
      myjpeg.LoadFromFile('你的图片.jpg');
      bitmap.Assign(myjpeg);
      form1.repaint;
      Rect1 := Rect(0,0,bitmap.width div 2,bitmap.height div 2);
      rect2 := Rect(0,0,bitmap.width div 2,bitmap.height div 2);
      canvas.copyrect(rect2,bitmap.canvas,rect1);
      bitmap.Free;
    end;
      

  2.   

    new一个Bitbmp和JPEG,然后直接用CopyRect就可以拉。
      

  3.   

    显示jpg图像的一部分(其它部分不读入内存),
    这个真的比较麻烦,具体没有做过,不过有个思路。
    1.先建立文件流
    fstream:=Tfilestream.create(filename,fmOpenRead);
    2.跳过jpeg文件的头部,从jpeg文件的数据开始读取数据
    fstream.Seek(20,soFromBeginning);
    3.读取指定块或者按字节读取数据
    fstream.Read(buf,sizeof(buf));
    4.建立内存流
    mstream:=TMemorystream.Create;
    5.拷贝文件流到内存流
    mstream.CopyFrom(fstream,j);
    6.建立TJPEGimage,读取mstream
    jpg:=Tjpegimage.Create; 
    jpg.LoadFromStream(mstream)
    7.显示继续关注。
      

  4.   

    各位所提的copyrect虽然我没用过,但从myjpeg.loadfromfile()看,整个文件还是要读入内存,我的图片太大,读入太慢,读数据流不知道怎么样找到想要显示的那部分数据。
      

  5.   

    以前我用vc做过一个图象处理的程序,可惜丢了,真的帮不上忙了。我记得要先从文件头取出jpg图片的高和宽,然后根据高和宽可以知道具体的图象上的某一点的在数据区的位置,然后读出数据。