Difference between revisions of "BGRABitmap/zh CN"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "===说明=== '''BGRABitmap''' 是一个用来创建和更改透明图像(具有alpha 通道)的单元集. 直接像素访问允许进行快速的图像处理. 这个库已在 ...")
 
Line 63: Line 63:
 
* dmFastBlend or dmLinearBlend : 使用alpha混合绘制但不进行gamma矫正 (更快速 但会带有轻度的颜色畸变).
 
* dmFastBlend or dmLinearBlend : 使用alpha混合绘制但不进行gamma矫正 (更快速 但会带有轻度的颜色畸变).
 
* dmXor : 对个组件进行异或(Xor)操作,包括alpha (如果只反相颜色而保持alpha, 使用 BGRA(255,255,255,0) )
 
* dmXor : 对个组件进行异或(Xor)操作,包括alpha (如果只反相颜色而保持alpha, 使用 BGRA(255,255,255,0) )
 +
 +
===集成的绘图功能===
 +
 +
* 绘制/擦除 像素
 +
* 画线(带或不带抗锯齿)
 +
* 浮点坐标
 +
* 浮点画笔宽度
 +
* 矩形 (边框 或 填充)
 +
* 椭圆 和 多边形 (带有抗锯齿)
 +
* 样条计算 (园曲线)
 +
* 简单填充 (Floodfill) 或 渐进式填充
 +
* 颜色渐变渲染 (线性, 放射...)
 +
* 圆角矩形
 +
* 带透明特性的文本

Revision as of 16:25, 4 April 2015

说明

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) 或 渐进式填充
  • 颜色渐变渲染 (线性, 放射...)
  • 圆角矩形
  • 带透明特性的文本