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的更多相关文章

  1. Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览

    Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public   constructor Create(...); ov ...

  2. Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题

    Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...

  3. Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem

    Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...

  4. Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid

    Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...

  5. Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEdit

    Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditL ...

  6. Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox

    Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项 ...

  7. Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo

    Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如:   Memo1.UseSma ...

  8. Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox

    Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...

  9. Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu

    Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...

随机推荐

  1. 剑指offer-链表中环的入口结点-链表-python ***

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路 第一步,用两个快慢指针找环中相汇点.分别用slow, fast指向链表头部,slow每次走一步,fast每次 ...

  2. 2019 NCTF Re WP

    0x01 debug 测试文件:https://www.lanzous.com/i7kr2ta 1.Linux运行环境 在Linux上运行linux_server64文件 2.IDA配置 __int6 ...

  3. Windows系统如何安装Redis

    转自 http://blog.csdn.net/lamp_yang_3533/article/details/52024744 一.Redis的下载地址 Redis官方并没有提供Redis的windo ...

  4. 深度学习之group convolution,计算量及参数量

    目录: 1.什么是group convolution? 和普通的卷积有什么区别? 2.分析计算量.flops 3.分析参数量 4.相比于传统普通卷积有什么优势以及缺点,有什么改进方法? 5.refer ...

  5. k3 cloud注册插件的时候提示,请选择一个有效的插件程序集

    插件类的访问类型需要是public类型的,由于你的插件类没有标记为public类型,所以注册的时候并没有发现有插件,就是下面的单据体没有加载出数据.标记public之后,下面会有你的插件,然后选择对应 ...

  6. 将Medium中的博客导出成markdown

    Medium(https://medium.com)(需要翻墙访问)是国外非常知名的一个博客平台.上面经常有很多知名的技术大牛在上面发布博客,现在一般国内的搬运的技术文章大多数都是来自于这个平台. M ...

  7. 利用 TCMalloc 优化 Nginx 的性能

    TCMalloc 全称为 Thread-Caching Malloc,是谷歌的开源工具 google-perftools 的成员,它可以 在内存分配效率和速度上高很多,可以很大程度提高服务器在高并发情 ...

  8. win10文件夹共享

    1.开启server服务就可以使用net share 命令 2.查看目前已共享的文件夹 3.关闭默认共享 只有用administrator(且有密码)才能连上win10上的默认共享了,只有admini ...

  9. 2019 蓝桥杯国赛 B 组模拟赛 E 蒜头图 (并查集判环)

    思路: 我们看条件,发现满足条件的子图无非就是一些环构成的图, 因为只有形成环,才满足边的两个点都在子图中,并且子图中节点的度是大于0的偶数. 那么如果当前有k个环,我们可以选2^k-1个子图,为什么 ...

  10. ubuntu进入纯命令行

    启动按shfit 然后光标在第一行按e 倒数第二行末尾添加quiet splash $vt_handoff 3 然后按CTRL+X或F10引导系统,启动之后就是命令行模式了