TImage、TPaintBox、TPicture、TBitmap、TCanvas、TGraphic 的关系与区别作者:万一 来源:博客园 发布时间:2009-01-09 23:01
来源:互联网 发布:java实现文件加密解密 编辑:程序博客网 时间:2024/05/02 00:15
TImage、TPaintBox、TPicture、TBitmap、TCanvas、TGraphic 的关系与区别
作者:万一 来源:博客园 发布时间:2009-01-09 23:01 阅读:3209 次 原文链接 [收藏]
TGraphic 是 TBitmap 的父类, 很多绘图函数的参数是 TGraphic, 但我们经常给函数的是 TBitmap;
TBitmap 的很多功能都是继承自 TGraphic, 譬如:
Width、Height、LoadFromFile、SaveToFile、LoadFromStream、SaveToStream;
还有 Palette(调色板)、Transparent(是否透明) 等等.
TGraphic 实用举例:
var g: TGraphic;begin g := TBitmap.Create; g.LoadFromFile('c:\temp\test.bmp'); Self.Canvas.StretchDraw(ClientRect, g); g.Free;end;
TCanvas 是一个绘图表面, 像画圆、画方、画笔、画刷等等都是它的功能;
控件的 Canvas 属性就是一个 TCanvas, 譬如:
var cvs: TCanvas;begin cvs := Self.Canvas; cvs.Brush.Color := clYellow; cvs.Font.Color := clRed; cvs.Font.Name := '宋体'; cvs.Font.Style := [fsBold]; cvs.Font.Size := 24; cvs.TextOut(10, 10, '万一的 Delphi 博客');end;
有些控件没有直接给 Canvas 属性, 我们也可以通过 TCanvas 获取它的绘图表面;
一切看得见的控件都应该有绘图表面, 不然系统是怎么画的?
譬如 TPanel 和 TButton 就没有 Canvas 属性, 没有是因为不常用, 如果需要可以这样:
var cvs: TCanvas;begin cvs := TCanvas.Create; cvs.Handle := GetDC(Panel1.Handle); cvs.Pen.Width := 2; cvs.Pen.Color := clRed; cvs.Brush.Color := clYellow; cvs.Rectangle(5, 5, 50, 30); cvs.Free;end;
再说 TBitmap, 它从 TGraphic 继承, 同时又把 TCanvas 纳为自己的属性;
所以它有了处理图片和绘图的双重功能!
给 TBitmap 也举个例子吧:
var bit: TBitmap;begin bit := TBitmap.Create; bit.LoadFromFile('c:\temp\test.bmp'); bit.Canvas.Brush.Style := bsClear; bit.Canvas.Pen.Color := clRed; bit.Canvas.Pen.Width := 2; bit.Canvas.Ellipse(2, 2, 88, 66); Self.Canvas.Draw(0, 0, bit); bit.Free;end;
TPicture 是为了处理更多种格式的图片(譬如: ico、wmf 等)而存在的;
但它把 TGraphic、TCanvas、TBitmap 的功能通通借用过来, 所以功能更强大.
TPicture 和 TGraphic 重复的功能(譬如: LoadFromFile)都是内部调用的 TGraphic;
但如果要给它绘图, 需要调用: TPicture.Bitmap.Canvas.
下面的例子是用 TPicture 画了个十字图标(显示并保存起来):
var pic: TPicture;begin pic := TPicture.Create; pic.Bitmap.SetSize(32, 32); pic.Bitmap.Canvas.Pen.Color := clRed; pic.Bitmap.Canvas.Pen.Width := 8; pic.Bitmap.Canvas.MoveTo(0, 16); pic.Bitmap.Canvas.LineTo(32, 16); pic.Bitmap.Canvas.MoveTo(16, 0); pic.Bitmap.Canvas.LineTo(16, 32); Self.Canvas.Draw(4, 4, pic.Graphic); pic.SaveToFile('c:\temp\test.ico'); pic.Free;end;
TImage 则主要是为了显示图片, 它主要包含的是 TPicture, 有了 TPicture 就有了上面的一切;
但因它是从 TControl -> TGraphicControl 继承下来的, 所以它具备了控件的基本能力(事件、消息等等).
TPaintBox 主要用于绘图, 没有处理图片的能力, 所以只包含了 TCanvas;
它也是从 TControl -> TGraphicControl 继承, 是能够交互的控件了.
很显然, TImage 比 TPaintBox 的能力强大; 但仅就绘图来讲, 还是 TPaintBox 轻便些.
- TImage、TPaintBox、TPicture、TBitmap、TCanvas、TGraphic 的关系与区别作者:万一 来源:博客园 发布时间:2009-01-09 23:01
- 分享一个有趣的学习方法,欢迎一起探讨如何提高学习兴趣作者:1-2-3 来源:博客园 发布时间:2009-03-09 16:20 阅读:2820 次 原文链接 [收藏]
- TImage里的图形转为TJPEGImage,TBitmap
- 曾经我也迷茫,你还在迷茫吗?写给像我一样的在校计算机专业学生作者:Cat_Lee 来源:博客园 发布时间:2009-05-30 20:25 阅读:1104 次 原文链接 [收藏]
- Extjs学习笔记之五——一个小细节renderTo和applyTo的区别 作者:Katmaier 来源:博客园
- 自动化测试的7个步骤 作者:Bret Pettichord 来源:51testing 发布时间:2005.12.16
- 万一的 Delphi 博客
- 万一的 Delphi 博客
- 数据转换-delphi资料网上搜集(来源:万一的博客)
- JPA+Hibernate 的连接池设置 C3P0与Proxool【来源:赛迪博客 作者:zhangxinzhou】
- Oracle 的位图索引(作者:未知 来源:supcode.com收集整理 发布时间:2005-6-30 14:32:00)
- 软件版本称呼 - 万一的 Delphi 博客 - 博客园
- Delphi 数据类型列表 - 万一的 Delphi 博客 - 博客园
- Delphi与c++ 数据类型对照表(从万一的博客园摘录)
- 作者: 果冻虾仁 来源: CSDN 发布时间: 2017-08-10 23:08 阅读: 52608 次 推荐: 251
- facade设计模式学习(作者:KiddLee 来源:博客园 酷勤网收集 2007-09-03)
- WINFORM控件开发 来源:博客园 作者:纶巾客
- ASP.NET构建网站必备的七种工具 转自来源:博客园 作者:周雪峰
- Java常用类型(Integer,BigDecimal)定义、转换及比较
- 八叉树
- 心情
- hdu 4342 History repeat itself
- 傻鸟版双缓冲
- TImage、TPaintBox、TPicture、TBitmap、TCanvas、TGraphic 的关系与区别作者:万一 来源:博客园 发布时间:2009-01-09 23:01
- 画布上的图形保存未bitmap
- Hibernate 映射类型
- PHP超时处理全面总结
- 语音基本常识
- 关于delphi对象存入Tlist中的使用
- 第一个裸奔程序——跑马灯
- 20120808-课堂笔记 --继承、重载
- 使用ILmerge合并Exe、Dll文件的帮助类