8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Delphi XE2 之 FireMonkey 入门(9) - TBitmap

来源:本站原创 浏览:125次 时间:2021-09-10
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(0, 0);  ShowMessage(BoolToStr(bit.IsEmpty, True));  bit.SetSize(100, 100);  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(60);  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(0, 0);  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(0, 0);  bit.Assign(Image1.Bitmap);  bts := bit.StartLine;  for i := 0 to bit.Width - 1 do    for j := 0 to bit.Height - 1 do      TAlphaColorRec(bts[i*j]).A := TAlphaColorRec(bts[i*j]).A div 2; //现在通过数组指针可以直接索引元素了, 太好  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 := 0;    Image1.Position.Y := 0;    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 2, H div 2);  for i := 0 to W - 1 do    for j := 0 to H - 1 do    begin      if Odd(i) and Odd(j) then //复制单数行以缩小图像一倍        bit.Pixels[i div 2, j div 2] := 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(100, 100);  bit2 := TBitmap.Create(100, 100);  bit3 := TBitmap.Create(100, 100);  bit1.Clear(claRed);  bit2.Clear(claGreen);  bit3.Clear(claBlue);  Image1.Width := 100;  Image1.Height := 100;  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 对象.




  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net