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

BCB如何做出遮色片效果

尚未結案
seavegg
一般會員


發表:5
回覆:3
積分:1
註冊:2004-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-08 15:58:04 IP:210.59.xxx.xxx 未訂閱
如題 不知道如何使用BCB作出遮色片的效果呢? 希望知道的大大能給小弟一些提示~
JerryKuo
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-08 17:15:30 IP:220.135.xxx.xxx 未訂閱
引言: 如題 不知道如何使用BCB作出遮色片的效果呢? 希望知道的大大能給小弟一些提示~
seavegg你好; 請問一下什麼是遮色片,是什麼原理?有什麼做用呢?
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-08 18:59:00 IP:211.76.xxx.xxx 未訂閱
seavegg 您好:    我試著模擬遮色片的效果,方法如下: 所謂的紅色遮色片,就是僅能讓紅色光部分通過,餘綠,藍色遮色片依此類推。    不過這是不是正確的方法,我不敢確定。如果有人知道真正的原理,歡迎告知! 程式連結: < href="http://delphi.ktop.com.tw/loadfile.php?TOPICID=19145284&CC=428176">http://delphi.ktop.com.tw/loadfile.php?TOPICID=19145284&CC=428176 執行畫面: RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
seavegg
一般會員


發表:5
回覆:3
積分:1
註冊:2004-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-08 22:43:08 IP:219.84.xxx.xxx 未訂閱
引言: seavegg你好; 請問一下什麼是遮色片,是什麼原理?有什麼做用呢?
沒有說清楚~ 真不好意思~ 遮色片是我照著FLASH中的元件名字說的 像是先再表單上放上一張背景圖~ 另外再放上一個圖型(EX:圓形) 然後只有在第二張圖形的範圍中第一張背景圖才會顯現~ 就像下面的圖~ 上面是原來的背景圖~ 下面是放上一圓形濾光片後的效果 如果我們把圓形向左移動一些就能看到左邊一些的背景圖~ 然而超過圓形的背景圖全被影藏了~ 發表人 - seavegg 於 2004/12/08 22:46:59
seavegg
一般會員


發表:5
回覆:3
積分:1
註冊:2004-12-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-08 22:43:54 IP:219.84.xxx.xxx 未訂閱
不小心按到多發ㄌ... 不好意思... >< 發表人 - seavegg 於 2004/12/08 22:47:43
stellos
中階會員


發表:24
回覆:84
積分:51
註冊:2004-06-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-09 09:43:21 IP:61.60.xxx.xxx 未訂閱
下面範例希望是你要的 < class="code"> 在表單上放Image1,Image2,Button1 void __fastcall TForm1::FormShow(TObject *Sender) { Image2->Visible=false; Image1->Picture->LoadFromFile("test.bmp"); //256色圖案為例 Image2->Picture->LoadFromFile("test.bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { int x,y; Byte *ptr1,*ptr2; //將Image2影像清除 for(y=0;y < Image2->Height;y ) { ptr2 = (byte *)Image2->Picture->Bitmap->ScanLine[y]; for(x=0;x < Image2->Width;x ) ptr2[x]=(Byte) 255; } Image2->Canvas->Pen->Color=clBlack; Image2->Canvas->Brush->Color=clBlack; Image2->Canvas->Ellipse(100,100,200,200); //依照Image2對Image1做圖,(Image1大小與Image2大小一樣) for(y=0;y < Image2->Height;y ) { ptr1 = (byte *)Image1->Picture->Bitmap->ScanLine[y]; ptr2 = (byte *)Image2->Picture->Bitmap->ScanLine[y]; for(x=0;x < Image2->Width;x ) { if(ptr2[x]==255) ptr1[x]=(Byte) 255; } } Image1->Repaint(); } --- 發表程式時,請依下面方式發表,謝謝合作 [code] // BCB, Delphi 的程式碼 [/code] 發表人 - jerrykuo 於 2004/12/09 11:28:26
JerryKuo
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-09 12:27:08 IP:220.135.xxx.xxx 未訂閱
或是用region方式
    // Bmp是原始圖,bmp1是加光罩的後圖片        Graphics::TBitmap* bmp1=new Graphics::TBitmap;
    byte            *ptr1,*ptr2;
    static int      mask_x = 0,mask_y = 0;                    //光罩位移
    static int      masksize_x = 100,masksize_y = 100;        //光罩大小        HRGN MyRgn = ::CreateEllipticRgn(0, 0, masksize_x, masksize_y); //光罩區域範圍        bmp1->PixelFormat = pf24bit;
    bmp1->Width  = Bmp->Width;
    bmp1->Height = Bmp->Height;
    bmp1->Transparent = true;
    bmp1->TransparentMode = tmAuto;
    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 - mask_x,y - mask_y))
            {
                ptr1[3*x] = ptr2[3*x];
                ptr1[3*x 1] = ptr2[3*x 1];
                ptr1[3*x 2] = ptr2[3*x 2];
            }
        }
    }        Image2->Picture->Assign(bmp1);
JerryKuo
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-10 10:42:12 IP:220.135.xxx.xxx 未訂閱
引言: 或是用region方式
    // Bmp是原始圖,bmp1是加光罩的後圖片        Graphics::TBitmap* bmp1=new Graphics::TBitmap;
    byte            *ptr1,*ptr2;
    static int      mask_x = 0,mask_y = 0;                    //光罩位移
    static int      masksize_x = 100,masksize_y = 100;        //光罩大小        HRGN MyRgn = ::CreateEllipticRgn(0, 0, masksize_x, masksize_y); //光罩區域範圍        bmp1->PixelFormat = pf24bit;
    bmp1->Width  = Bmp->Width;
    bmp1->Height = Bmp->Height;
    bmp1->Transparent = true;
    bmp1->TransparentMode = tmAuto;
    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 - mask_x,y - mask_y))
            {
                ptr1[3*x] = ptr2[3*x];
                ptr1[3*x 1] = ptr2[3*x 1];
                ptr1[3*x 2] = ptr2[3*x 2];
            }
        }
    }        Image2->Picture->Assign(bmp1);
被我抓到重覆發文喔... 【 href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=60950">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=60950 這兩個問題好像都差不多? 發表人 - jerrykuo 於 2004/12/10 13:20:08
系統時間:2024-05-20 21:50:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!