• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            小四的海市蜃樓
            Never surrender to complexity
            posts - 21,comments - 59,trackbacks - 0

            GDI+的顏色矩陣由一個5*5的float型數組構成,用來對每一個像素的顏色(R,G,B,A)做線性變換,每個像素顏色與矩陣相乘。把一幅彩色圖轉成灰度圖的算法是,假設像素點顏色為(r,g,b),轉換成灰度圖三個顏色分量是一樣的,稱作灰階,灰階的計算是 r*0.299+g*0.587+b*0.114。我們可以逐個像素轉換,也可以使用顏色矩陣。所以彩色圖轉灰度圖的顏色矩陣為
            ColorMatrix matrix =
            {0.299, 0.299, 0.299, 0, 0,
             0.587, 0.587, 0.587, 0, 0,
             0.114, 0.114, 0.114, 0, 0,
             0,     0,     0,     1, 0,
             0,     0,     0,     0, 0}

            這樣轉換后,灰度圖的灰階分布在0~255之間。如果想把一幅彩色圖渲染成雙色圖,定義一個深顏色darker,一個淺顏色lighter,那么灰度圖只是一個darker是黑色而lighter是白色的特例。本來分布在0~255的灰階,這樣應該分別分布在(lighter.r~darker.r),(lighter.g~darker.g),(lighter.b~darker.b)。

            編寫代碼如下,使用白色和紫色。

            void CDuotoneDlg::OnButton1() 
            {
                Bitmap  img(L
            "c:\\test1.jpg");
                Graphics graphix(
            this->GetDC()->m_hDC);

                Color darker(
            0);
                Color lighter(
            8414370);

                
            const float gray_r = 0.299f;
                
            const float gray_g = 0.587f;
                
            const float gray_b = 0.114f;

                
            float offset_r = (float)darker.GetR() / 255;
                
            float offset_g = (float)darker.GetG() / 255;
                
            float offset_b = (float)darker.GetB() / 255;    

                
            float r = (float)(lighter.GetR() - darker.GetR()) / 255;
                
            float g = (float)(lighter.GetG() - darker.GetG()) / 255;
                
            float b = (float)(lighter.GetB() - darker.GetB()) / 255;

                ImageAttributes imgatt;
                ColorMatrix matrix 
            =
                    
            {
                       gray_r
            *r, gray_r*g, gray_r*b, 00,
                       gray_g
            *r, gray_g*g, gray_g*b, 00,
                       gray_b
            *r, gray_b*g, gray_b*b, 00,
                       
            00010
                       offset_r, offset_g, offset_b, 
            01
                    }
            ;

                imgatt.SetColorMatrix(
            &matrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap);

                
            int iWidth = img.GetWidth();
                
            int iHeight = img.GetHeight();

                graphix.DrawImage(
                    
            &img,
                    Rect(
            00, iWidth, iHeight),  
                    
            0.0f,                         
                    
            0.0f,                         
                    iWidth,                       
                    iHeight,                      
                    UnitPixel,
                    
            &imgatt);

                graphix.ReleaseHDC(
            this->GetDC()->m_hDC);
            }

            渲染圖片測試
            posted on 2008-01-05 14:01 小四 閱讀(652) 評論(0)  編輯 收藏 引用 所屬分類: 圖形圖像與計算幾何
            久久精品18| 麻豆一区二区99久久久久| 91久久精品电影| 久久精品国产清自在天天线| 免费一级做a爰片久久毛片潮| 久久精品国产99国产精品亚洲| 久久99精品久久久久婷婷| 精品久久久久久久久久中文字幕| 久久久国产99久久国产一| 精品久久久久久国产潘金莲| 久久天天躁狠狠躁夜夜av浪潮| 97精品国产97久久久久久免费| 一级做a爰片久久毛片人呢| 色播久久人人爽人人爽人人片AV| 国产精品九九九久久九九| 三级三级久久三级久久 | 国产亚洲美女精品久久久久狼| 成人a毛片久久免费播放| 97精品国产97久久久久久免费| 久久av免费天堂小草播放| 激情伊人五月天久久综合| 亚洲人成无码久久电影网站| 国产亚洲欧美成人久久片| 久久综合噜噜激激的五月天| 亚洲精品97久久中文字幕无码 | 国产午夜精品久久久久免费视| 日韩亚洲国产综合久久久| 久久精品国产91久久麻豆自制| 无码人妻久久一区二区三区免费| 久久人妻少妇嫩草AV蜜桃| 精品国产一区二区三区久久蜜臀| 久久99精品久久久久久| 狠狠狠色丁香婷婷综合久久俺| 久久久久高潮毛片免费全部播放 | 久久久一本精品99久久精品88| 久久91精品国产91久| 午夜视频久久久久一区 | 久久久久高潮综合影院| 亚洲欧洲精品成人久久奇米网| 欧美精品福利视频一区二区三区久久久精品 | 伊人热热久久原色播放www|