我有一张图片demo.bmp,我只需要这图片上的一个部分就行了,但是我不知道我的下面的代码哪里错。请指教高手们。
截取这个图片后就保存到demo12.bmp,procedure TForm1.Button4Click(Sender: TObject);
var   
      rect1,   rect2:   trect;   
      mCanvas:   TCanvas;   
      mHDC:   HDC;   
      bitmap   :   tbitmap;   
  begin
  try
      bitmap   :=   tbitmap.create;      bitmap.loadfromfile('d:\我的文档\桌面\test\demo.bmp');
      mCanvas   :=   TCanvas.Create;      mHDC   :=   GetDC(bitmap.Handle);      mCanvas.Handle   :=   mHDC;      rect1   :=   bitmap.Canvas.ClipRect;      rect2   :=   Rect(300,   400,  bitmap.Handle , bitmap.Handle );      bitmap.Canvas.CopyRect(rect2,mCanvas,rect1);
      bitmap.SaveToFile('d:\我的文档\桌面\test\demo12.bmp');      bitmap.free;
      mCanvas.Free;
          finally
      end;
end;

解决方案 »

  1.   

      bmp  := TBitmap.Create;      // 由于读上传文件时,必须是流或文件,故 Image 中只需要一个缩略图
      jpg := TJPEGImage.Create;  try
        try
          jpg.LoadFromFile(photoFile.FileName); //读取源文件
          if jpg.Width >= jpg.Height then       //计算缩小比例
            n := jpg.Width
          else
            n := jpg.Height;
          for k := 1 to maxLoopTime do begin
            r1 := (k + 0)/maxLoopTime * n;
            r2 := (k + 1)/maxLoopTime * n;
            if (Round(r1) < maxImageSize) and (Round(r2) >= maxImageSize) then break;
          end;      bmp.Width := jpg.Width;  //缩小
          bmp.Height := jpg.Height;
          
          bmp.PixelFormat := pf24bit;  // 设置格式
          bmp.Canvas.StretchDraw(Rect(0,0,width, height), jpg);
        catch
          on EE: Exception do
            Application.MessageBox(PAnsiChar('读相片信息失败: ' + EE.Message), 'ePhoto 提示', 48);
        end;
      finally
        bmp.Free;
        jpg.Free;
      end;
    上面是俺的一段代码,区别在于俺设置了 bmp.PixelForm