Delphi XE2 之 FireMonkey 入门(9) - TBitmap
TBitmap 主要成员:
{ 方法 }
SetSize(); //设置大小
Clear(); //取消, 就是用指定颜色覆盖
ClearRect(); //覆盖指定矩形范围, 默认覆盖为透明色
BitmapChanged(); //刷新改变
IsEmpty(); //是否为空
UpdateHandles(); //将 Handles 数组中的对象标记为需要更新
AddFreeNotify(); //将指定对象添加到可以释放的列表; 这一般是针对添加到 Handles 中的对象
RemoveFreeNotify(); //释放指定对象; 这一般是针对添加到 Handles 中的对象
Rotate(); //旋转角度
FlipHorizontal(); //水平翻转
FlipVertical(); //垂直翻转
InvertAlpha(); //翻转透明度, 只适于透明图片
FillColor(); //填充遮罩色, 用于透明图片
CreateMask(); //建立蒙版; 是从 TBitmap 中把各像素的透明度提取为一个数组, 返回数组指针
ApplyMask(); //添加蒙版, 其参数应该是有 CreateMask() 建立的
CreateThumbnail(); //建立略缩图
LoadFromFile(); //从文件载入
LoadFromStream(); //从流中载入
LoadThumbnailFromFile(); //从文件载入为略缩图
SaveToFile(); //保存到文件
SaveToStream(); //保存到流
HandleRemove(); //从 Handles 数组移除对象, 并没有释放
HandleAdd(); //添加对象到 Handles 数组
HandleExists(); //判断指定对象是否已添加到 Handles 数组
{ 属性 }
Width : Integer; //宽
Height : Integer; //高
Handles[AItem: Pointer] : Pointer; //访问 Handles 中的对象, 索引是指针; 写入前需要先 HandleAdd();
HandlesNeedUpdate[AItem: Pointer] : Boolean; //判断 Handles 中的指定对象是否需要更新
Canvas : TCanvas; //获取绘图表面
Pixels[X, Y: Integer] : TAlphaColor; //获取或设置指定位置的颜色值
ScanLine[Y: Integer] : PAlphaColorArray; //获取一条横线上的像素数组的指针
StartLine : PAlphaColorArray; //获取像素数组的指针
ResourceBitmap : TBitmap; //该属性应该是内部使用的
StyleLookup : string; //这应该是和控件的造型相关的, 暂不知 TBitmap 要它干嘛
{ 事件 }
OnChange: TNotifyEvent; //
Create()、SetSize()、Clear()、IsEmpty():
procedure TForm1.Button1Click(Sender: TObject);
var
bit: TBitmap;
begin
bit := TBitmap.Create(, );
ShowMessage(BoolToStr(bit.IsEmpty, True));
bit.SetSize(, );
ShowMessage(BoolToStr(bit.IsEmpty, True));
bit.Clear(claRed);
Image1.Bitmap.Assign(bit);
bit.Free;
end;
Rotate()、FlipHorizontal()、FlipVertical():
procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Bitmap.LoadFromFile(OpenDialog1.FileName);
Image1.WrapMode := TImageWrapMode.iwFit;
end;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Rotate');
Image1.Bitmap.Rotate(); ShowMessage('FlipHorizontal');
Image1.Bitmap.FlipHorizontal; ShowMessage('FlipVertical');
Image1.Bitmap.FlipVertical;
end;
FillColor():
procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Bitmap.LoadFromFile(OpenDialog1.FileName); //要个透明图片
Image1.WrapMode := TImageWrapMode.iwFit;
end;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Bitmap.FillColor($800000FF);
// Image1.Bitmap.FillColor($FF0000FF);
end;
CreateMask()、ApplyMask():
procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Bitmap.LoadFromFile(OpenDialog1.FileName); //要个透明图片
Image1.WrapMode := TImageWrapMode.iwFit;
end;
end; procedure TForm1.Button1Click(Sender: TObject);
var
bit: TBitmap;
bitAs: PByteArray;
begin
bit := TBitmap.Create(, );
bit.Assign(Image1.Bitmap); //从 Image1 复制 TBitmap bitAs := bit.CreateMask;
Image1.Bitmap.Clear(claBlue);
Image1.Bitmap.ApplyMask(bitAs); bit.Free;
end;
StartLine: 尽管该属性是只读的, 但因为是指针, 所以可以直接改写像素.
procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Bitmap.LoadFromFile(OpenDialog1.FileName); //要个透明图片
Image1.WrapMode := TImageWrapMode.iwFit;
end;
end; //点击按钮调整图像的透明度
procedure TForm1.Button1Click(Sender: TObject);
var
bit: TBitmap;
bts: PAlphaColorArray;
i: Integer;
j: Integer;
begin
bit := TBitmap.Create(, );
bit.Assign(Image1.Bitmap);
bts := bit.StartLine; for i := to bit.Width - do
for j := to bit.Height - do
TAlphaColorRec(bts[i*j]).A := TAlphaColorRec(bts[i*j]).A div ; //现在通过数组指针可以直接索引元素了, 太好 Image1.Bitmap.Assign(bit);
bit.Free;
end;
Pixels[X, Y: Integer]:
procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Bitmap.LoadFromFile(OpenDialog1.FileName); //要个透明图片
Image1.WrapMode := TImageWrapMode.iwFit;
Image1.Position.X := ;
Image1.Position.Y := ;
Image1.Width := Image1.Bitmap.Width;
Image1.Height := Image1.Bitmap.Height;
end;
end; procedure TForm1.Button1Click(Sender: TObject);
var
bit: TBitmap;
W,H,i,j: Integer;
R: TRectF;
begin
W := Trunc(Image1.Width);
H := Trunc(Image1.Height);
bit := TBitmap.Create(W div , H div ); for i := to W - do
for j := to H - do
begin
if Odd(i) and Odd(j) then //复制单数行以缩小图像一倍
bit.Pixels[i div , j div ] := Image1.Bitmap.Pixels[i, j];
end;
Image1.Width := bit.Width;
Image1.Height := bit.Height;
Image1.Bitmap.Assign(bit);
Realign;
bit.Free;
end;
Handles 相关: TBitmap 内部管理着一个对象数组, 访问索引也是一个指针.
var
bit1,bit2,bit3: TBitmap; procedure TForm1.FormCreate(Sender: TObject);
begin
bit1 := TBitmap.Create(, );
bit2 := TBitmap.Create(, );
bit3 := TBitmap.Create(, );
bit1.Clear(claRed);
bit2.Clear(claGreen);
bit3.Clear(claBlue); Image1.Width := ;
Image1.Height := ; Image1.Bitmap.HandleAdd(Button1);
Image1.Bitmap.Handles[Button1] := bit1; Image1.Bitmap.HandleAdd(Button2);
Image1.Bitmap.Handles[Button2] := bit2; Image1.Bitmap.HandleAdd(Button3);
Image1.Bitmap.Handles[Button3] := bit3; Button2.OnClick := Button1.OnClick;
Button3.OnClick := Button1.OnClick;
end; procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Bitmap := Image1.Bitmap.Handles[Sender];
end;
通过 FMX.Types 单元中的 GetMeasureBitmap() 函数可以快速获取 1*1 的 TBitmap 对象.
Delphi XE2 之 FireMonkey 入门(9) - TBitmap的更多相关文章
- Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public constructor Create(...); ov ...
- Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题
Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...
- Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...
- Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid
Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...
- Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEdit
Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditL ...
- Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox
Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项 ...
- Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo
Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如: Memo1.UseSma ...
- Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...
- Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu
Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...
随机推荐
- springmvc,springboot单元测试配置
1. springmvc单元测试配置 <dependency> <groupId>junit</groupId> <artifactId>junit&l ...
- react找到对象数组中指定的值
找到对象数组中指定的值var array = [ { label: "Custom", value: "0" }, ...
- C#人民币金额大写转换
人民币金额大小写转换,三行代码 //完善了一下查询到的方法,支持小数,保留2位小数 public string NumGetStr(double Num) { string[] DX_SZ = { & ...
- AFNetworking2.0源码解析<二>
本篇我们继续来看看AFNetworking的下一个模块 — AFURLRequestSerialization. AFURLRequestSerialization用于帮助构建NSURLReque ...
- Linux系统性能测试工具(二)——内存压力测试工具memtester
本文介绍关于Linux系统(适用于centos/ubuntu等)的内存压力测试工具-memtester.内存性能测试工具包括: 内存带宽测试工具——mbw: 内存压力测试工具——memtester: ...
- Java Web学习总结(4)HttpServletResponse
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.获取网页提交过来的数据,只需要找request对象就行了.要向网 ...
- 认识一下Qt用到的开发工具
http://c.biancheng.net/view/3868.html Qt 不是凭空产生的,它是基于现有工具链打造而成的,它所使用的编译器.链接器.调试器等都不是自己的,Qt 官方只是开发了上层 ...
- Linux shell 误操作
shell脚本在日常运维中是必不可少会应用到,下面是自己亲身经历过的一件事.会了定期清除日志,编写了一个shell脚本,内容如下: [root@centos- tmp]# more remote_lo ...
- Netty学习--第二章 BIO的模型详解
一.什么是阻塞.非阻塞.同步.异步 我们以A线程调用B线程的过程例子来讲解这四个概念 在一个程序里,A调用B了,此时如果是 同步: A必须等待B返回结果后,才能继续执行,但是在这期间A会一直监控B的返 ...
- 【LOJ#6036】[雅礼集训2017Day4]编码
传送门 题意简述 判定 n 个含 ? 字符的二进制串是否存在一种把 0/1 填入 ? 中的方案使得任意两个串不具有前缀关系. (一个串最多一个 ?) Sol 二进制串 ,并且一个串最多一个 '?' 很 ...