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 ...
随机推荐
- 关于使用iframe的父子页面进行简单的相互传值
当一个页面使用了iframe作为嵌套时,如何想要将父页面的数据传给iframe子页面,那iframe所指向的呢个子页面是怎么获取呢,又或者子页面的数据要给父页面使用,那么父页面又如何获取子页面的数据呢 ...
- 33. Search in Rotated Sorted Array (JAVA)
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- UITableView 在没有数据时候分割线问题
在iOS4.3中可以直接设置footer为nil,但是在5.0不行,因为UITableView会默认生成一个Footer. (详见iOS Release Notes中的说明:Returning nil ...
- WPF游戏,使用move游戏开发
我看了好多游戏的源码,其实每一个,我想做,rpg的都需要移动,那么wpf,win8应用,数据绑定,我们需要一个Thread来让人物移动. 于是用move. 在每个人物,自己和敌人,npc类,都有一个m ...
- ie10兼容问题 -- 将div定位absolute在图片img上面,导致div点击事件无效
ie10兼容问题: 将div定位absolute在图片img上面,发现div若不加背景色,导致div点击事件(任何事件)无效. <div class="paper-box"& ...
- N^2取N
序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 先把A B排序 然后pushA[1]+B[i](1<=i<=n)每次取出一 ...
- Set 的合集 并集 差集
合集 ,,,,,,]; ,,]; function union() { //先将数组去重 let s1 = new Set(arr1); let s2 = new Set(arr2); //[...s ...
- LOJ6279 果树
我丢 之前sun在某校集训给我看过 当时也没想起来 今天补省集的锅的时候发现 wok这题我还听过?! 身败名裂.jpg (可是你记性不好这事情不已经人尽皆知了吗? 咳咳 回归正题 考虑对于两个同色的点 ...
- 微信小程序开发-入门到熟练(wepy-初级篇)
Title:最近做完了项目,review代码的同时,就想写一篇详细的小程序开发经历,记录自己的项目从0到1的过程 Desc : 小程序从0到1,从小白到完成项目,你需要这样做: step1: 基础知识 ...
- js 获取滚动位置,滚动到指定位置,平滑滚动
1.获取当前滚动条位置信息 var top = dom.scrollTop; // 获取y轴上的滚动位置 var left = dom.scrollLeft; // 获取x轴上的滚动位置 2.滚动到指 ...