比如说截取一个宽高为3000象素的其中宽高300像素的一块?

解决方案 »

  1.   

    看到一种办法是用Canvas对象的CopyRect方法,但用Canvas,就要先在Canvas上加载这个图象文件吧,但对于宽高不确定的图象,比如说宽高为3000象素的图像,上面这种办法不行啊?  
      

  2.   

    我的困惑在于我想把这个功能编写成一个函数,而不一定要用到某个界面。
    如果要用Canvas的话,就要有个Form或Image吧?,而这个Form或Image如果本身是不可见的,Canvas.CopyRect怎么好象不行啊?
    我的代码:
    function PruneJPG(sJFile, DJFile: String): Boolean;
    var
      sJpg, DJpg: TJPEGImage;
      bmp1,bmp2: TBitmap;
    begin
      Result:=true;
      try
        bmp1:=TBitmap.Create;
        bmp2:=TBitmap.Create;
        sJpg:=TJPEGImage.Create;
        sJpg.LoadFromFile(sJFile);
        DJpg:=TJPEGImage.Create;
        bmp1.Width:=100;
        bmp2.Height:=100;
        bmp1.PixelFormat:= pf24bit;
        bmp2.PixelFormat:=pf24bit;
        bmp2.Assign(sJpg);
        bmp1.Canvas.CopyRect(Rect(0,0,100,100),bmp2.Canvas,Rect(0,0,100,100));
        Djpg.Assign(bmp1);
        djpg.SaveToFile(DJFile);
        bmp1.Free;
        bmp2.Free;
        sJpg.Free;
        DJpg.Free;
      except
        Result:=false;
      end;
    end;调用:
       if PruneJPG('C:\1.jpg','C:\2.jpg') then showMessage('OK');我的目的是剪取1.jpg的一块,形成2.jpg
      

  3.   

    但是执行以后的2.jpg是个0长度的空文件。
      

  4.   

    少了两句话bmp1.Height := 100;
    bmp2.Width := 100;