Android下Skia遮罩特效的實現

2021-05-27 13:09:13 字數 1488 閱讀 4920

android下skia遮罩特效的實現

大體需求是,有乙個文字點陣,叫glyph,為單色點陣,有筆畫的地方為黑色,1;無筆畫的地方為白色,0;

現在要把這個字畫到螢幕,還有乙個要求,要用當前顏色畫;

分析來分析去,這就是乙個簡單的rop3操作,或者簡單一點,就是乙個遮罩特效:使用glyph當遮罩,使用當前顏色畫矩形,僅此而以。

但是,目前沒有在skia中找到類似的操作,只找到skxformode裡有這樣的定義:

enum mode

else

}w -= 8;

}dline += dstride;

sline += sstride;}}

......

2 使用當前顏色轉換遮罩

skbitmap *srcbmp = (skbitmap*)(bitmap);

skpaint paint;

skcanvas canvas(*srcbmp);

paint.setxfermodemode(skxfermode::ksrcin_mode);

paint.setcolor(display->forecolor);

skrect rect = ;

canvas.drawrect(rect, paint);

自此,srcbmp已經變成了當前顏色表示的字元點陣

3 把字元畫到螢幕

skshader* s = skshader::createbitmapshader(*srcbmp,

skshader::kclamp_tilemode,

skshader::kclamp_tilemode);

skmatrix matrix;

matrix.reset();

matrix.posttranslate(x, y);

skshader *shader = (skshader *)s;

shader->setlocalmatrix(matrix); // 設定原點

skpaint *paint = (skpaint *)paint;

paint->setshader(shader)->unref();

paint->setxfermodemode(skxfermode::ksrcover_mode);

paint->setcolor(display->forecolor);

skrect rect = ;

canvas->drawrect(rect, *paint);

這段**,相當於把乙個部分區域透明的pattern畫到螢幕上

這樣,我們就實現了字元遮罩的功能,使用當前顏色把字元畫到螢幕上了。

當然,我們只是畫了乙個單色字元,其實也可以畫很複雜的圖案,類似於ps和flash裡的遮罩層的效果。

以上**是示意**,因此有些地方明顯無法編譯,有些地方明顯多此一舉,請注意。

另,skia有類似mask的概念,但看來看去,好像沒有我們這裡說的遮罩功能。

如果大家有更好的實現方法,也請告訴我一下。

Android 實現遮罩

關鍵方法 paint.setxfermode new porterduffxfermode porterduff.mode.src in 說明 canvas原有的圖可以理解為dst 新畫上去的前景圖可以理解為sre mode值如下圖 一般用法 canvas canvas new canvas bit...

android使用shape使元件呈現特殊效果

android radius 10dp android startcolor 33cc00 android endcolor 666600 android angle 45 android left 5dp android top 5dp android right 5dp android bott...

Android開發必看知識 最強大的UI特效

android開發必看知識,不看後悔 打包為大家奉上最實用最給力的資源,不看你絕對後悔。最強大的ui特效 奇藝高畫質ui介面源 搜尋關鍵字飛入飛出效果 水波紋效果,附工程原始碼 效果很好很逼真 特效!超牛x launcher特效 仿360一鍵優化動畫效果 功能強大的拼圖人生原始碼 最火爆的精品例項 ...