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

📄 缩放.txt

📁 该文件是关于图像缩放
💻 TXT
字号:
网络社团--技术文档--在Delphi中实现图片的旋转、缩放



                  网络时代
                  网站建设
                  冲浪宝典 


                  网页设计
                  HTML
                  CSS
                  JavaScript
                  DreamWeaver
                  Flash


                  美工教室
                  Firworks
                  Photoshop
                  3DS Max
                  CorelDraw


                  程序开发
                  Visual Basic
                  Visual C++
                  Java
                  Delphi
                  Perl
                  PHP
                  ASP
                  .NET
                  其他开发语言
                  数据库开发
                  游戏开发
                  文件格式
                  API函数详解
                  其 他



                  操作系统
                  Windows系列


                  实用软件
                  管理维护 

                  多媒体与图像 


                  冲浪宝典
                  网络组建

                  入门技巧

                  注册表



            在Delphi中实现图片的旋转、缩放





            好长时间没有写东西了,并不是因为前面的东西遭受了很多西红柿和鸡蛋,而是自己实在没有什么真实的东西写出来供大家参考。但是最近在帮一个朋友做一个项目的时候,遇到了在delphi中对图像的简单处理,于是不停的从网上找资料,翻看csdn以前的帖子,从我搜索的结果发现很多人会在各种项目中遇到类似的图片处理问题,但是多数得到的答案似乎并不完整(因为很多都没有结帖,也可能是个人习惯的问题,呵呵,希望大家读了我这个文章之后,能够家开结帖速度)。于是我把我遇到的问题和解决方案写在下面,供大家参考,同时欢迎大家继续拍砖。
            在正式内容之前要把我要解决的问题写在前面,同时也让读者有一个好的定位,从而不会因为我在处理过程中的拙劣手段而感到恼火。这里主要解决的问题是在Delphi中将用扫描仪扫描得到的图片进行90度旋转,从而得到适合使用的图片,并且由于不能正确把握图片的大小,因此要对图片进行简单的缩放。而我的解决方法也完全是根据此要求进行,因为对于效率、图片处理之后的清晰度考虑的不是很多,同时带来的好处就是程序看起来很简单。
            首先,我没有扫描仪,因此我不知道使用扫描程序(已经提供)得到的图片是什么格式,而在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;
            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没有正确显示图片大小的情况下)。
            可以肯定这个方法不是很好的方法,但是至少它解决了问题。
            啰里啰唆,不知所谓。
            版权所有:idilent 网站转载请注明作者 其他转载方式请与作者联系(idilent@yahoo.com.cn)。




点击这里,推荐笨本页面给你的朋友!

      本网站所有资料版权归结网络社团所有
      © 2002~2003


⌨️ 快捷键说明

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