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 ...
随机推荐
- 剑指offer-链表中环的入口结点-链表-python ***
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路 第一步,用两个快慢指针找环中相汇点.分别用slow, fast指向链表头部,slow每次走一步,fast每次 ...
- 2019 NCTF Re WP
0x01 debug 测试文件:https://www.lanzous.com/i7kr2ta 1.Linux运行环境 在Linux上运行linux_server64文件 2.IDA配置 __int6 ...
- Windows系统如何安装Redis
转自 http://blog.csdn.net/lamp_yang_3533/article/details/52024744 一.Redis的下载地址 Redis官方并没有提供Redis的windo ...
- 深度学习之group convolution,计算量及参数量
目录: 1.什么是group convolution? 和普通的卷积有什么区别? 2.分析计算量.flops 3.分析参数量 4.相比于传统普通卷积有什么优势以及缺点,有什么改进方法? 5.refer ...
- k3 cloud注册插件的时候提示,请选择一个有效的插件程序集
插件类的访问类型需要是public类型的,由于你的插件类没有标记为public类型,所以注册的时候并没有发现有插件,就是下面的单据体没有加载出数据.标记public之后,下面会有你的插件,然后选择对应 ...
- 将Medium中的博客导出成markdown
Medium(https://medium.com)(需要翻墙访问)是国外非常知名的一个博客平台.上面经常有很多知名的技术大牛在上面发布博客,现在一般国内的搬运的技术文章大多数都是来自于这个平台. M ...
- 利用 TCMalloc 优化 Nginx 的性能
TCMalloc 全称为 Thread-Caching Malloc,是谷歌的开源工具 google-perftools 的成员,它可以 在内存分配效率和速度上高很多,可以很大程度提高服务器在高并发情 ...
- win10文件夹共享
1.开启server服务就可以使用net share 命令 2.查看目前已共享的文件夹 3.关闭默认共享 只有用administrator(且有密码)才能连上win10上的默认共享了,只有admini ...
- 2019 蓝桥杯国赛 B 组模拟赛 E 蒜头图 (并查集判环)
思路: 我们看条件,发现满足条件的子图无非就是一些环构成的图, 因为只有形成环,才满足边的两个点都在子图中,并且子图中节点的度是大于0的偶数. 那么如果当前有k个环,我们可以选2^k-1个子图,为什么 ...
- ubuntu进入纯命令行
启动按shfit 然后光标在第一行按e 倒数第二行末尾添加quiet splash $vt_handoff 3 然后按CTRL+X或F10引导系统,启动之后就是命令行模式了