在TCanvas上画图

将一幅bmp图片,从文件中加载到窗口的TCanvas上去,代码如下:

      ::Graphics::TBitmap *bmp= new ::Graphics::TBitmap;
      bmp->Transparent = true;//是否透明
      bmp->LoadFromFile("right1.bmp");
      Canvas->Draw(0,0,bmp);
      delete bmp;

在TCanvas上画背景透明的文字,代码如下:

    Image1->Canvas->Font->Color = clRed;   //文字颜色
    Image1->Canvas->Brush->Style = bsClear;//文字区域透明
    Image1->Canvas->TextOutA(20,0,"大家好");

在TCanvas上画矩形,矩形区域透明

    Image1->Canvas->Brush->Style = bsClear;
    Image1->Canvas->Rectangle(51,0,78,28);

在TCanvas上画图后,想擦除刚画的图形,代码如下:

    Image1->Canvas->Pen->Mode = pmNotXor ;
    Image1->Canvas->Pen->Color = clBlue;
    Image1->Canvas->Pen->Style = psSolid;
    Image1->Canvas->Pen->Width = 1;

将上述代码执行第二次时,擦除第一次所画图形。

在内存中画图,复制到其他的TCanvas上

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ::Graphics::TBitmap *bmp = new ::Graphics::TBitmap;
    bmp->Width = 100;
    bmp->Height= 100;
    bmp->Canvas->Pen->Color = clRed;
    bmp->Canvas->Ellipse(0,0,100,100);

    TRect a(0,0,200,200);
    TRect b(0,0,200,200);

    //复制位图bmp到窗口画布上,clBlack是透明色,即位图中将要被透过的颜色,与位图背景色相同
    Canvas->BrushCopy(a, bmp, b, clBlack);
    
    //Image1->Picture->Bitmap->Assign(bmp);//后面屏蔽的这几句功能相似。
    //Image1->Picture->Bitmap=bmp;

    Canvas->CopyMode = SRCCOPY;//复制时实现一些运算,SRCCOPY是直接复制,无运算
    Canvas->CopyRect(a,bmp->Canvas,b); 

    //API函是实现复制位图
    //BitBlt(this->Canvas->Handle,0,0,100,100,bmp->Canvas->Handle,0,0,SRCCOPY);
}

如果是资源中的图片,如何将其显示到TImage控件呢?有两种方法:

   TImage * m_pImg = new TImage(m_pParent);
   m_pImg->Parent = m_pParent;
   m_pImg->Width  = 32;
   m_pImg->Height = 15;
   m_pImg->Left   = 118;
   m_pImg->Top    = 68;
   m_pImg->Transparent = true;//透明显示
   ::Graphics::TBitmap * pArrow_bmp = new ::Graphics::TBitmap;
   pArrow_bmp->Width  =32;
   pArrow_bmp->Height =15;
   pArrow_bmp->Handle = GetArrowFromRes(0);//获取资源中的位图句标,这里是自定函数,也可用库函数
   m_pImg->Canvas->Draw(0,0,pArrow_bmp);//画位图到TImage控件上

   //可用如下库函数
   //m_pImg->Canvas->BrushCopy(TRect(0,0,32,15),
                             //pArrow_bmp,
                             //TRect(0,0,32,15),clWhite);
   delete pArrow_bmp;
另一种方法,如下:
m_pImg->Picture->Bitmap->Handle =  GetArrowFromRes(0);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值