BGRABitmap/zh CN
说明
BGRABitmap 是一个用来创建和更改透明图像(具有alpha 通道)的单元集. 直接像素访问允许进行快速的图像处理. 这个库已在 Windows, Ubuntu 和 Mac OS X 平台测试通过(最后的版本不能在 Mac平台工作), 以及各平台的小部件集 win32, gtk1, gtk2 和 carbon.
其中主要的类是 TBGRABitmap, 派生自 TFPCustomImage. 还有一个类 TBGRAPtrBitmap 允许编辑已经分配的 BGRA 数据. 每个像素的格式包括4个字节 (顺序为 蓝, 绿, 红 和 alpha.
使用 BGRABitmap
教程
概述
为了便于理解,函数的命名比较长. 其中的任何功能如函数或使用TBGRABitmap对象的属性都是容易理解的. 例如, 你可以使用CanvasBGRA作为画布,这和TCanvas类似 (但具有透明度和反锯齿),并且可以使用Canvas2D来实现类似 HTML canvas的一些功能.
一些特定的功能需要依赖一些单元的引用, 但你可能不需要使用它们 :
- TBGRAMultishapeFiller 实现多边形的反锯齿节点(交叉点),在 BGRAPolygon 单元中
- TBGRATextEffect 在 BGRATextFX 单元中
- 2D 转换在 BGRATransform 单元中
- TBGRAScene3D 在 BGRAScene3D 单元中
- 如果你需要用到层, BGRALayers 单元提供了 TBGRALayeredBitmap
双缓冲并不包含在 BGRABitmap 单元中, 因为其更多的是关于如何处理窗口. 如果要使用双缓冲技术, 你可以使用 TBGRAVirtualScreen ,包含在 BGRAControls 组件包中. 此外, BGRABitmap中双缓冲和其它任何缓冲用法一样. 你需要一个位图来存储你的绘图,然后使用一条绘图指令将其显示出来.
简单示例
你必须在你的工程中引用 BGRABitmap 单元:
Uses Classes, SysUtils, BGRABitmap, BGRABitmapTypes;
单元 BGRABitmapTypes 包含所有必要的定义, 对于仅仅加载和显示位图,可以只声明引用 BGRABitmap. 然后, 首先创建一个 TBGRABitmap 对象:
var bmp: TBGRABitmap;
begin
bmp := TBGRABitmap.Create(100,100,BGRABlack); //creates a 100x100 pixels image with black background
bmp.FillRect(20,20,60,60,BGRAWhite, dmSet); //draws a white square without transparency
bmp.FillRect(40,40,80,80,BGRA(0,0,255,128), dmDrawWithTransparency); //draws a transparent blue square
end;
最后显示位图:
procedure TFMain.FormPaint(Sender: TObject);
begin
bmp.Draw(Canvas, 0, 0, True); // draw the bitmap in opaque mode (faster)
end;
概念
位图中带有透明特性的像素被保存为4个值, 这里是4个字节,其顺序为 蓝, 绿, 红, Alpha. 最后一个通道定义了透明度 (0 代表 完全透明, 255 代表完全不透明), 其它通道定义了颜色和亮度.
基本上又两种绘图模式. 第一种是直接替换像素信息, 第二种是已有的像素和新的进行混合, 称为alpha通道混合.
BGRABitmap 的函数提供4种模式:
- dmSet : 替换绘制像素的4个字节, 不处理透明度
- dmDrawWithTransparency : 使用 alpha混合绘制并进行 gamma 矫正 (see below)
- dmFastBlend or dmLinearBlend : 使用alpha混合绘制但不进行gamma矫正 (更快速 但会带有轻度的颜色畸变).
- dmXor : 对个组件进行异或(Xor)操作,包括alpha (如果只反相颜色而保持alpha, 使用 BGRA(255,255,255,0) )
集成的绘图功能
- 绘制/擦除 像素
- 画线(带或不带抗锯齿)
- 浮点坐标
- 浮点画笔宽度
- 矩形 (边框 或 填充)
- 椭圆 和 多边形 (带有抗锯齿)
- 样条计算 (园曲线)
- 简单填充 (Floodfill) 或 渐进式填充
- 颜色渐变渲染 (线性, 放射...)
- 圆角矩形
- 带透明特性的文本