日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SkMaskFilter (SkBlurMaskFilter的使用)

發布時間:2024/1/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SkMaskFilter (SkBlurMaskFilter的使用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

還是先看下類的繼承關系:

SkNoncopyable

?????? ∟ SkRefCnt

???????????? ∟SkFlattenable

????????????????? ∟SkMaskFilter

??????????????????????? ∟SkBlurMaskFilterImpl

??????????????????????? ∟SkEmbossMaskFilter

??????????????????????? ∟SkTableMaskFilter

?? ? ? ? ? ? ? ? ? ? ? ?∟SkKernel33ProcMaskFilter

SkBlurMaskFilter

SkBlurMask ?

SkEmbossMask

以上為與MaskFilter相關的類,其他SkBlurMaskFilter/SkBlurMask/SkEmbossMask三個類在effect目錄下的文件中定義。

SkBlurMask 只封裝了靜態成員函數Blur

SkEmbossMask 只封裝了靜態成員函數Emboss

從參數看 Blur 和Emboss 是改變SkMask對象的作用。

SkEmbossMaskFilter 的成員函數 filterMask 用到了SkBlurMask::Blur和SkEmbossMask::Emboss

SkBlurMaskFilterImpl?的成員函數 filterMask 用到了SkBlurMask::Blur。

--------------------------------------------------------------- -------------------------------使用--

要使用MaskFilter要通過類 SkBlurMaskFilter

SkBlurMaskFilter是個獨立的類,沒有繼承關系。

class SK_API SkBlurMaskFilter { public:enum BlurStyle { //模糊風格kNormal_BlurStyle, //!< fuzzy inside and outside 模糊內外kSolid_BlurStyle, //!< solid inside, fuzzy outside 內實體,外模糊kOuter_BlurStyle, //!< nothing inside, fuzzy outside 內部空,外模糊kInner_BlurStyle, //!< fuzzy inside, nothing outside 內模糊,外空kBlurStyleCount //style個數};enum BlurFlags {kNone_BlurFlag = 0x00,/**模糊半徑不被transforms影響 */ kIgnoreTransform_BlurFlag = 0x01,/** 使用smother 高質量模糊算法 */kHighQuality_BlurFlag = 0x02,/** 所有模糊標志的 */kAll_BlurFlag = 0x03};static SkMaskFilter* Create(SkScalar radius, BlurStyle style, uint32_t flags = kNone_BlurFlag);static SkMaskFilter* CreateEmboss( const SkScalar direction[3],SkScalar ambient, SkScalar specular,SkScalar blurRadius); private:SkBlurMaskFilter(); // can't be instantiated };

 SkBlurMaskFilter 定義了 BlurStyle 類型和?BlurFlags 類型

 SkBlurMaskFilter的構造函數是私有成員,不能創建SkBlurMaskFilter類型對象。

 然后封裝了兩個靜態成員函數Create(...) 和 CreateEmboss(...)。

 Create()函數用它的參數 new 了一個 SkBlurMaskFilterImp l對象。

 CreateEmboss()用它的參數 new 了一個 SkEmbossMaskFilter 對象。

 1.Create(...) 參數

  SkScalar radius:要大于0,模糊效果的半徑? 從圖形邊沿開始算(往里、往外)radius經過或者不經過轉換的值如果超過128(float),會被賦值為128(float)。

  BlurStyle style:BlurStyle?

  Uint32_t flags:?BlurFlags? ,flags包含kHighQuality_BlurFlag標志時,為高質量,否則是低質量。

  相互關系:當flags是kIgnoreTransform_BlurFlag的時候,radius不被矩陣轉換影響,否則會按矩陣轉換。

  實際效果1:

  flags選擇默認的kNone_BlurFlag,根據style的不同從左到右分別是:

  

kNormal_BlurStyle:圖形邊界內外都有模糊效果

kSolid_BlurStyle:內部是實體(paint指定的顏色),外邊模糊

kOuter_BlurStyle:內部不繪制,外邊模糊效果

kInner_BlurStyel:內部模糊效果,外部不繪制

  實際效果2:

  flag選擇kIgnoreTransform_BlurFlag的時候,不同style的效果是(順序同上):

  

    模糊半徑忽略了矩陣變換。只有2像素

  實際效果3

  flag選擇kHighQuality_BlurFlag的時候,情況如下:

  

    與kNone_BlurFlag在拐角處略有區別。(看眼花了…)

  實際效果4:

  flag選擇kAll_BlurFlag的時候:

  

    相當于:kHighQuality_BlurFlag(高質量)+kIgnoreTransform_BlurFlag(模糊半徑忽略矩陣)

 2.CreateEmboss(...) 參數

  const SkScalar direction[3] 指定光源方向

    這里的光應該都是平行光(與所畫圖形在屏幕上位置無關), Z軸正向是屏幕往外,理解direction為光源位置。direction到(0,0,0)的向量方向就是平行光的光線方向。

  如果設置z軸<=0,就相當于沒有光源在屏幕后面,也就是在圖形后面,無法產生光照效果。

  SkScalar ambient 環境光強度? 范圍0---1的scalar值,小于0效果同0,大于1效果同1。

  SkScalar specular 鏡面反射光? 范圍0---15.99的scalar值,小于0效果同0,大于15.99效果同15.99。

  SkScalar blurRadius 模糊半徑,同Create(...)的參數意義。

  效果圖:(最后一個箭頭)

  

  上圖代碼:

void BlurMask_path() {SkPaint embossPaint;embossPaint.setAntiAlias(true);embossPaint.setColor(SK_ColorRED);SkScalar dir[3] ={-5,5,5};SkMaskFilter *embossMask = SkBlurMaskFilter::CreateEmboss(dir,0.5,1,2);embossPaint.setMaskFilter(embossMask);embossMask->unref();SkMaskFilter * blurMask[SkBlurMaskFilter::kBlurStyleCount];for (size_t i = 0;i<SK_ARRAY_COUNT(blurMask);i++){//下面依次實驗flags參數//maskFilter[i] = SkBlurMaskFilter::Create(2,SkBlurMaskFilter::BlurStyle(i));//默認flags//maskFilter[i] = SkBlurMaskFilter::Create(2,SkBlurMaskFilter::BlurStyle(i),//SkBlurMaskFilter::kIgnoreTransform_BlurFlag);//忽略矩陣變換,注意只有模板半徑忽略矩陣變換blurMask[i] = SkBlurMaskFilter::Create(2,SkBlurMaskFilter::BlurStyle(i),SkBlurMaskFilter::kHighQuality_BlurFlag);//maskFilter[i] = SkBlurMaskFilter::Create(2,SkBlurMaskFilter::BlurStyle(i),// SkBlurMaskFilter::kAll_BlurFlag);}SkPaint blurPaint[SK_ARRAY_COUNT(blurMask)];for (size_t i = 0;i<SK_ARRAY_COUNT(blurMask);i++){blurPaint[i].setAntiAlias(true);blurPaint[i].setColor(SK_ColorRED);blurPaint[i].setMaskFilter(blurMask[i]);blurMask[i]->unref();}//DrawImage("\\USER\\Skia\\music-n.png",pskCanvas,g_rtImg,&embossPaint); //對畫圖片沒效果float pts[]={0, 0,10, 0,10, 5,20, -5,10, -15,10, -10,0, -10}; //將這些坐標連起來是一個箭頭形狀SkPath fPath;fPath.moveTo(pts[0], pts[1]);for (size_t i = 2; i < SK_ARRAY_COUNT(pts); i += 2) {fPath.lineTo(pts[i], pts[i+1]);}pskCanvas->scale(5,5); //水平垂直都放大5倍pskCanvas->translate(10,30); //移動坐標原點for (size_t i = 0;i<SK_ARRAY_COUNT(blurMask);i++){pskCanvas->drawPath(fPath, blurPaint[i]);pskCanvas->translate(32, 0); //水平移動32像素(實際效果要經過scale)}pskCanvas->drawPath(fPath, embossPaint); }

  (箭頭數組來源:http://code.google.com/p/skia/source/browse/trunk/samplecode/SampleEffects.cpp)

  分析關于光源的方向:

  選定光源指定后,效果與所畫圖形在屏幕的位置無關,是平行光。

  光源在不同x,y坐標情況下,其他參數同上面代碼:z坐標5,環境光0.5,反射光1,模糊半徑2,效果圖如下:

  x軸向左?Y軸向上 ,z軸向屏幕外。

以備補充:

ezhong的博客園:http://www.cnblogs.com/ezhong/? ? ?2011-11-30/17:53:47

轉載于:https://www.cnblogs.com/ezhong/archive/2011/11/30/2269501.html

總結

以上是生活随笔為你收集整理的SkMaskFilter (SkBlurMaskFilter的使用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色片在线观看视频 | 国产视频在线免费观看 | 亚洲精品麻豆 | 综合色综合 | 很嫩很紧直喷白浆h | 欧美日韩69| 天堂视频一区 | 亚洲日本免费 | 国产一区二区精品丝袜 | 欧美三日本三级少妇三 | av男人网 | 性色国产成人久久久精品 | 超碰国产在线观看 | 91视频免费 | 天堂资源| 国产福利在线 | 亚洲免费在线视频观看 | 在线看日韩av | 日批视频免费在线观看 | 国产日本视频 | 欧美日韩一区二区三区电影 | 亚色av | 久久亚洲国产成人精品性色 | 欧美粗暴se喷水 | 免播放器在线视频 | 国产精品88av | 精品国产18久久久久久二百 | 一区二区三区精品 | 亚洲中文字幕在线观看 | 青青青在线| 亚洲鲁鲁| 欧美第一视频 | 国产伦精品一区二区三区精品 | www亚洲国产 | av一区二区在线播放 | 亚洲精品一区三区三区在线观看 | 国产成人在线免费观看 | 精品福利三区3d卡通动漫 | 超碰人人擦 | 国产黄色一级 | 久久99精品久久久久久园产越南 | 亚洲国产精品成人综合在线 | 久久久久久久亚洲精品 | 香蕉视频在线网址 | 国产人妻精品久久久久野外 | 久久av在线播放 | 亚洲第一综合网站 | 亚洲在线免费视频 | youjizzcom日本 | 一级不卡毛片 | 欧美91精品久久久久国产性生爱 | 午夜激情视频网站 | 少妇精品久久久久久久久久 | 亚洲精品一区二区三区婷婷月 | 国产在线视频不卡 | 91网站在线免费看 | 国产一区在线不卡 | 成年人视频在线免费观看 | 三上悠亚中文字幕在线播放 | 超碰超碰 | 亚洲欧美视频在线播放 | 破处视频在线观看 | 91精品视频在线 | 国产黑丝在线播放 | 欧美精品久久天天躁 | 欧洲色网 | 潘金莲一级淫片免费放动漫 | 色接久久 | 无码国产精品久久一区免费 | 美女av免费看 | 亚洲天堂一级 | 国产激情二区 | 亚洲无av在线中文字幕 | 精品成人av一区二区三区 | 亚洲不卡av一区二区 | 日韩最新视频 | 久久97精品久久久久久久不卡 | 国产高清在线免费 | 欧美不卡在线视频 | 精品一区二区人妻 | 国产精品污视频 | 九九这里只有精品视频 | 国产美女精品 | 用舌头去添高潮无码视频 | 天天做夜夜爱 | 青青艹在线视频 | 特级丰满少妇一级aaaa爱毛片 | 欧美精品二区三区 | 伊人中文字幕在线 | 色老头网址 | 国产在线1 | 天天操天天透 | av影视在线观看 | 国产精品成人免费一区久久羞羞 | 黄色资源网站 | 男女插插网站 | 日本色区 | 国产精品剧情 | 人人艹人人 |