線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1370
推到 Plurk!
推到 Facebook!

在Form1繪製甜甜圈圖案

尚未結案
kung
一般會員


發表:4
回覆:8
積分:2
註冊:2003-11-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-05 23:20:22 IP:211.76.xxx.xxx 未訂閱
小弟知道用 CreateEllipticRgn、CombineRgn等API函式製作一個甜甜圈區域(HRGN), 請教各位--如何將 Image1的現有圖像,依照這甜甜圈區域,繪製在 Form1 背景上?    (假設都已經取得甜甜圈區域(HRGN)) 如圖:
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-10 10:58:16 IP:210.68.xxx.xxx 未訂閱
你好:    要畫在Form上,請參考下面的程式
    Graphics::TBitmap* bmp=new Graphics::TBitmap;
    .......//在此處將甜甜圈的影像資料,放到bmp裡;
    .......//記得設定 bmp->Transparent = true; 這樣才有空心的效果;
    // { 如果要並列顯示,請加上這一段,不然就只要Canvas->Draw(x, y, 
    //   bmp),x,y是要秀出的位置;
    int w(b->Width);
    int h(b->Height);        for (int y(0); y < Height; y  = h) 
    {
       for (int x(0); x < Width; x  = w) 
       {
            Canvas->Draw(x, y, bmp);
       }
    }
    // }
    delete bmp;
因為不會用 CreateEllipticRgn、CombineRgn等API函式製作一個甜甜圈區域 (HRGN),我只能提供上述的方法。方便的話,教一下怎麼做HRGN() 發表人 - jerrykuo 於 2003/11/10 11:02:18
kung
一般會員


發表:4
回覆:8
積分:2
註冊:2003-11-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-20 02:04:11 IP:211.76.xxx.xxx 未訂閱
引言: 因為不會用 CreateEllipticRgn、CombineRgn等API函式製作一個甜甜圈區域 (HRGN),我只能提供上述的方法。方便的話,教一下怎麼做HRGN()
jerrykuo, 謝謝您的指導,小可仍無頭緒。 HRGN的取得,是我在一本BCB與WinAPI範例集的書上得知的,如後:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HRGN MyRgn; //甜甜圈區域範圍
HRGN hRgn1 = ::CreateEllipticRgn(0, 0, 200, 200);
HRGN hRgn2 = ::CreateEllipticRgn(20, 20, 180, 180);
//再結合此兩個橢圓形位置與範圍,即為甜甜圈區域
::CombineRgn(MyRgn,hRgn1,hRgn2,RGN_XOR);    //這裡就是要處理的地方...    //完成繪出戒指後,逐一釋放區域物件
::DeleteObject(hRgn1);
::DeleteObject(hRgn2);
::DeleteObject(MyRgn);
}
//---------------------------------------------------------------------------
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-20 18:53:19 IP:61.230.xxx.xxx 未訂閱
Graphics::TBitmap *Bmp = new Graphics::TBitmap();  // 請載入原始圖;    void __fastcall TForm1::ButtonClick(TObject *Sender)
{
 Graphics::TBitmap* bmp1=new Graphics::TBitmap;
 byte *ptr1,*ptr2;
 RECT  R;
 HRGN MyRgn = ::CreateEllipticRgn(0, 0, Bmp->Width, Bmp->Height); //甜甜圈區域範圍;
 HRGN hRgn1 = ::CreateEllipticRgn(0, 0, 200, 200);
 HRGN hRgn2 = ::CreateEllipticRgn(20, 20, 180, 180);     //再結合此兩個橢圓形位置與範圍,即為甜甜圈區域;
 ::CombineRgn(MyRgn,hRgn1,hRgn2,RGN_XOR);     bmp1->PixelFormat = pf24bit;
 bmp1->Width       = Bmp->Width;
 bmp1->Height      = Bmp->Height;
 bmp1->Transparent = true;     for(int y=0;yHeight;y  )
 {
   ptr1=(byte *)(bmp1->ScanLine[y]);
   ptr2=(byte *)(Bmp->ScanLine[y]);
   for(int x=0;xWidth;x  )
   {
      if (PtInRegion(MyRgn,x,y))
      {
       ptr1[3*x] = ptr2[3*x];
       ptr1[3*x 1] = ptr2[3*x 1];
       ptr1[3*x 2] = ptr2[3*x 2];
      }
   }
 }     Canvas->Draw(200,200,bmp1);     //完成繪出戒指後,逐一釋放區域物件;
 ::DeleteObject(hRgn1);
 ::DeleteObject(hRgn2);
 ::DeleteObject(MyRgn);
}
Try it~
系統時間:2024-05-06 12:30:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!