知识大全 在Delphi中实现图片的旋转、缩放
Posted 知
篇首语:人生来就不是为了被打败的,人能够被毁灭,但是不能够被打败。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Delphi中实现图片的旋转、缩放相关的知识,希望对你有一定的参考价值。
在Delphi中实现图片的旋转、缩放 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
好长时间没有写东西了 并不是因为前面的东西遭受了很多西红柿和鸡蛋 而是自己实在没有什么真实的东西写出来供大家参考 但是最近在帮一个朋友做一个项目的时候 遇到了在delphi中对图像的简单处理 于是不停的从网上找资料 翻看csdn以前的帖子 从我搜索的结果发现很多人会在各种项目中遇到类似的图片处理问题 但是多数得到的答案似乎并不完整(因为很多都没有结帖 也可能是个人习惯的问题 呵呵 希望大家读了我这个文章之后 能够家开结帖速度) 于是我把我遇到的问题和解决方案写在下面 供大家参考 同时欢迎大家继续拍砖在正式内容之前要把我要解决的问题写在前面 同时也让读者有一个好的定位 从而不会因为我在处理过程中的拙劣手段而感到恼火 这里主要解决的问题是在Delphi中将用扫描仪扫描得到的图片进行 度旋转 从而得到适合使用的图片 并且由于不能正确把握图片的大小 因此要对图片进行简单的缩放 而我的解决方法也完全是根据此要求进行 因为对于效率 图片处理之后的清晰度考虑的不是很多 同时带来的好处就是程序看起来很简单
首先 我没有扫描仪 因此我不知道使用扫描程序(已经提供)得到的图片是什么格式 而在Delphi的帮助中说 A bitmap is a powerful graphics object used to create manipulate (scale scroll rotate and paint) and store images in memory and as files on a disk 所以我的第一步就是要把我的片转化为TBitmap来处理 在转化格式的同时 我将图片的实际大小改变 以适合后面选取部分图像的需要 函数如下
procedure TMainForm ChangeImageFormate;var Bitmap : TBitmap;Zoom : Integer;beginBitmap := TBitmap Create; // trywith ImageCert do beginBitmap Assign(Picture Graphic); // Picture := nil; // Zoom := Max(Bitmap Width div Width Bitmap Height div Height)+ ; // Width := Bitmap Width div Zoom; // Height := Bitmap Height div Zoom; // Canvas StretchDraw(Rect( Width Height) Bitmap); // end;finallyBitmap Free;end; end;
我想这段代码并不是很复杂 ImageCert是一个TImage控件放在Form上 唯一可能陌生的就是第八句 但是大家可以从Delphi的帮助中得到很到说明 我在这就不再翻译了(我的建议就是多看帮助) 同时应该指出的是第三句作用是很关键的 如果去掉这一句同时你的图片格式不是bmp的话 就会出现 只有bitmap才能才能修改 的错误
第二步就是实现图片的旋转 因为程序要求只是每次旋转 度即可 因此这里也比较容易处理 处理的手段就是按照像素进行替换 实现过程如下
procedure TMainForm RotateImage;var x y : Integer;TmpBitMap : TBitmap;beginTmpBitMap := TBitmap Create;tryTmpBitMap Assign(ImageCert Picture Graphic);with ImageCert do beginPicture Bitmap Height := TmpBitMap Width;Picture Bitmap Width := TmpBitMap Height;for x:= to Height dofor y:= to Width doCanvas Pixels[TmpBitMap Height x y] := TmpBitMap Canvas Pixels[y x];Height := TmpBitMap Width;Width := TmpBitMap Height;end;finallyTmpBitMap Free;end;end;
这段程序也没有什么好讲的 但是几个高度和宽度的设置令我是分的烦闷 总是觉得多做的点什么 但是却偏偏去不掉任何一行 如果哪位有兴趣可以尝试一下 最好把结果也告诉我一声 而且在这个里面由于TImage和TBitmap都有各自的canvas 所以使用哪一个可能也是值得研究的 但是由于时间有限就没有在尝试了
至于在部分取图的过程中 我是用了一个TShape 然后用将brush的style设置成bsclear 在ImageCert的onMouseMove中安排这个TShap的位置 这样做不是很灵敏 因为当鼠标在TShape上面时则不会起到作用 所幸影响不大 同时我在TShape的OnMouseDown事件中取出TShape下面的部分图片 这个时候如果你的图片没有做过缩放处理 就会发现取出的图片和我们看到的位置不相符(当然是在TImage没有正确显示图片大小的情况下)
可以肯定这个方法不是很好的方法 但是至少它解决了问题
cha138/Article/program/Delphi/201311/24976相关参考
用原生的JavaScript实现的图片等比例缩放maxwidth和maxheight在ie中不兼容问题今天用jQuery实现了这些问题jQuery部分代码<scripttype=text/j
可实现以下常用功能缩放图像切割图像图像类型转换彩色转黑白文字水印图片水印等 代码如下复制代码importjavaawtAlphaComposite;importjavaawtColor;impo
很多时间特别是文章都会有图片是吧如果我们固定图片大小那就会变形了影响美观现在我们来一个实用的利用jquery来控制图片等比例缩放代码吧当然这是只等比例缩放图片大小的一种方法哦还有cssjs等很多时间特
Java图片处理文字水印图片水印缩放补白 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! pack
在photoshop中如何用快捷键旋转图片CTRL+T,再将光标置于图片的角处,会变成圆弧状,可以旋转了。你也可以在上方属性栏,修改旋转的具体角度。photoshop常用快捷键:1、(新建/填色/选区
Delphi中把bmp图片转换成jpg图片 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!//bmp
用Javascript使网页图片产生旋转效果 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Ro
maya动画制作软件怎样移动视角 maya视图操作的快捷键 Alt+鼠标左键旋转视图 Alt+鼠标中键移动视图 Alt+鼠标右键缩放视图 Alt+Ctrl+鼠标右键框选放大对象 Alt+Ctrl+鼠标
知识大全 delphi 缓冲画图(内存画图)解决画图闪烁问题[1]
很多朋友在做绘图程序的时候往往出现屏幕不停刷新产生闪烁的问题这里就告诉大家一个解决办法缓冲绘图如果有人是用取反画图解决这个问题那么在画直线的时候容易出现斑点效果不是很好如果是图片很大那么缓冲画图是
一光标的指示 当光标移动到要拖动或缩放的控件上时应显示相应的动作箭头定义一个枚举的变量来标识对应的状态 EnumEnumMousePointPosition MouseSizeNon