⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 绘制图形 delphi绘制矢量图形 简单的小程序
💻 TXT
字号:
实现图片的旋转和缩放2008-05-17 14:06第一步就是要把我的片转化为TBitmap来处理。在转化格式的同时,我将图片的实际大小改变,以适合后面选取部分图像的需要。函数如下:

procedure TMainForm.ChangeImageFormate;
var Bitmap : TBitmap;
    Zoom : Integer;
begin
Bitmap := TBitmap.Create;      //1
try
    with ImageCert do begin
      Bitmap.Assign(Picture.Graphic);     //2 
      Picture := nil;       //3
      Zoom := Max(Bitmap.Width div Width,Bitmap.Height div Height)+1; //4
      Width := Bitmap.Width div Zoom;     //5
      Height := Bitmap.Height div Zoom;     //6
      Canvas.StretchDraw(Rect(0,0,Width,Height),Bitmap); //7
    end;
finally
    Bitmap.Free;
end; 
end;

我想这段代码并不是很复杂,ImageCert是一个TImage控件放在Form上,唯一可能陌生的就是第八句,但是大家可以从Delphi的帮助中得到很到说明,我在这就不再翻译了(我的建议就是多看帮助)。同时应该指出的是第三句作用是很关键的,如果去掉这一句同时你的图片格式不是bmp的话,就会出现“只有bitmap才能才能修改”的错误。

第二步就是实现图片的旋转,因为程序要求只是每次旋转90度即可,因此这里也比较容易处理。处理的手段就是按照像素进行替换。实现过程如下:

procedure TMainForm.RotateImage;
var x,y : Integer;
    TmpBitMap : TBitmap;
begin
TmpBitMap := TBitmap.Create;
try
    TmpBitMap.Assign(ImageCert.Picture.Graphic);
    with ImageCert do begin
      Picture.Bitmap.Height := TmpBitMap.Width;
      Picture.Bitmap.Width := TmpBitMap.Height;
      for x:=0 to Height do
        for y:=0 to Width do
          Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
      Height := TmpBitMap.Width;
      Width := TmpBitMap.Height;
    end;
finally
    TmpBitMap.Free;
end;
end;

这段程序也没有什么好讲的,但是几个高度和宽度的设置令我是分的烦闷,总是觉得多做的点什么,但是却偏偏去不掉任何一行,如果哪位有兴趣可以尝试一下,最好把结果也告诉我一声。而且在这个里面由于TImage和TBitmap都有各自的canvas,所以使用哪一个可能也是值得研究的,但是由于时间有限就没有在尝试了。

至于在部分取图的过程中,我是用了一个TShape,然后用将brush的style设置成bsclear,在ImageCert的onMouseMove中安排这个TShap的位置,这样做不是很灵敏,因为当鼠标在TShape上面时则不会起到作用,所幸影响不大。同时我在TShape的OnMouseDown事件中取出TShape下面的部分图片。这个时候如果你的图片没有做过缩放处理,就会发现取出的图片和我们看到的位置不相符(当然是在TImage没有正确显示图片大小的情况下)。

可以肯定这个方法不是很好的方法,但是至少它解决了问题。
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -