Delphi GDI+ 图形处理(2)

本文介绍了Delphi中的图像处理,强调了图形处理在编程中的重要性,特别是Delphi中的图形处理类,如TPicture、TBitmap等。讨论了如何利用Delphi的Canvas类进行图形绘制,包括CopyRect、Draw等基本绘图方法,以及如何利用TBitmap和ScanLine属性进行高效图像处理。
摘要由CSDN通过智能技术生成
第一章           图像处理在可视化编程中的作用及其应用价值

图像处理,是可视化编程的基础内容。

在Windows操作系统中,一切要输出到屏幕上的东西都是通过图形处理这部分的内容来实现的。

比如一个程序使用了标签控件,它看起来似乎并没有用到什么图形处理,但实际上标签控件就是通过使用GDI库中的图形处理函数来实现的。可见图形处理在编程中的重要性。

图像处理在实际的应用中也极具价值。

平面制作、动画制作等都离不开它。这一部分的内容十分繁多。我本次研究的内容,只是其中最基础的、最重要一部分。

 

探究Delphi的图形处理 之二 -- 基本图像处理函数 

 

  第二章           图像处理函数

2.1 为什么选择Delphi

       所有的可视化编程语言都能够进行图像处理。但由于这些语言的定位不同,它们在进行图形处理的效率和便捷程度上也各不相同。

实际上,Visual C 的图像处理效率是最高的,Delphi已经把绝大多数GDI绘图函数都封装成可直接调用的类,使用它进行图形处理操作十分方便,而且Delphi 是Pascal演变而来的,Pascal具有严谨易读的特点,因此很容易上手。

2.2  Delphi中用于图形处理的类

Delphi为我们提供了许多图形图像方面的类,合理地使用这些类,我们可以方便地开发出各种图形处理程序。

这些类有TPicture、TBitmap、TGraphic、TIcon、TJPEGImage和TCanvas。其中,

TCanvas类用于绘图,

TPicture、TBitmap、TIcon和TJPEGImage是专门用来处理图片的类,

TGraphic是一个抽象类,一般不直接使用。

TPicture类可以载入所有支持的图片,

而TBitmap、TIcon、TJPEGImage分别用于处理各种类型的图片。

在实际应用中,我们一般用这些具体类型的类载入图片,再将图片转为Bitmap格式来处理。TPicture、TIcon、TJPEGImage类一般只用于输入和输出。例如,下面的代码可以载入一幅任意支持格式的图片(Delphi所支持的格式为bmp、jpg、dib、wmf和emf)。

 

            Var Pic:TPicture;
Begin
                     Pic := TPicture.Create;
                         Pic.LoadFromFile(FileName);
End;
 

用TPicture类来载入图片时,该类会根据文件名的扩展名来决定用何等方式来打开图片。

这就出现了一个问题,如果这个图片的扩展名被用户非法修改,程序就会把这个图片视为无效图片。在真正编程中,我们要用TPicture、TBitmap、TJPEGImage、TIcon依次尝试去打开图片。

另外,Delphi本身是不支持GIF文件格式的。我们可以借用一个第三方的类——GIFImage来让Delphi支持它。这个类在附带的光盘中可以找到。最终我们用下面的代码来完成载入图片的操作。

Procedure ReadPicture(FileName: String; Bitmap: Graphics.TBitmap);

var pic:TPicture;Bit:Graphics.TBitmap;jpgPic:TJPEGImage;FGifPic:TGIFImage;

    icoPic:TIcon;

begin

   FGifPic := TGifImage.Create;

   Pic:=Tpicture.Create;

   bit:=Graphics.TBitmap.Create;

   jpgPic:=TJPEGImage.Create;

   icoPic:=TIcon.Create;

    try

        pic.LoadFromFile(FileName);

        if uppercase(ExtractFileExt(Filename)) = '.ICO' then begin

           Bitmap.Height:=pic.Height;

           Bitmap.Width:=Pic.Width;

           Bitmap.Canvas.Draw(0,0,Pic.Graphic);

        end

        else

        bitmap.Assign(pic.Graphic);

    except

         try

           bitmap.LoadFromFile(FileName);

         except

             try

               jpgPic.LoadFromFile(FileName);

               bitmap.Assign(jpgPic);

             except

                  try

                    icoPic.LoadFromFile(Filename);

                    bitmap.Free;

                    Bitmap:=TBitmap.Create;

                    bitmap.Height:=icoPic.Height;

                    bitmap.Width:=icoPic.Width;

                    bitmap.Canvas.Draw(0,0,icoPic);

                  except

                      try

                         FgifPic.LoadFromFile(FileName);

                         Bitmap.Assign(FGifPic.Bitmap);

                      except

                         bitmap.Height:=bitmap.Canvas.TextHeight('8');

                         bitmap.Width:=bitmap.Canvas.TextWidth('无效图片');

                         BitMap.Canvas.TextOut(0,0,'无效图片');

                      end;{try}

                  end;

                end;{try}

             end;{try}

    end;{try}

   Pic.Free ;

   bit.Free;

   jpgPic.Free;

   icoPic.Free;

   FGifPic.Free;

end;

保存图片的方法跟打开图片的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值