97干视频,99国产精品懂色,亚洲精品99久久久久中文字幕,伊人五月丁香综合AⅤ,国产精品成人免费999

  您的位置:華清遠(yuǎn)見教育科技集團(tuán) >> 新聞動態(tài) >> Android資料 >> Android Skia圖形渲染  
 
Android Skia圖形渲染
分享到:

圖形渲染是Skia引擎的重要功能之一,在Skia圖形渲染的基類為SkDisplayable,其擴(kuò)展類包括SkText、SkLine、SkDrawPath、SkBaseBitmap、SkDrawRect等基本圖形操作。Skia引擎的圖形架構(gòu)下圖所示。


Skia引擎的圖形架構(gòu)

SkDevice是渲染設(shè)備的邏輯抽象,支持獲取SkBitmap的寬、高、配置、是否透明等信息。支持通過SkDraw進(jìn)行的基本繪圖操作,如Paint、Points、Rect、Path、Bitmap、Sprite、Text、PosText、TextOnPath、Vertices、Device等操作。在通常情況下,不建議直接調(diào)用SkDevice的方法,為了進(jìn)行圖形操作,可以通過SkCanvas的方法來進(jìn)行。

SkDraw是Skia進(jìn)行渲染時的實(shí)際執(zhí)行類,SkDevice在進(jìn)行渲染操作時需要調(diào)用該類的方法。

SkBitmap是渲染設(shè)備的物理抽象,是SkDevice的渲染對象。SkBitmap的配置信息包括色深(1位還是8位)、配色板(Color Table)、元數(shù)據(jù)模式(RGB565、ARGB4444、ARGB8888)等。

Image* ImageBuffer::image() const
    {
    if (!m_image) {
        ASSERT(context());
        SkCanvas* canvas=context()->platformContext()->mCanvas;    //獲取SkCanvas
        SkDevice* device=canvas->getDevice();    //獲取SkDevice
        const SkBitmap& orig=device->accessBitmap(false);    //獲取SkBitmap
        SkBitmap copy;
        orig.copyTo(©, orig.config());    //深度復(fù)制
        …
        }
    …
    }

SkCanvas是Skia的畫布類,封裝了渲染設(shè)備上的所有狀態(tài),通過和畫筆類SkPaint協(xié)同工作,來完成所有的渲染操作。SkCanvas渲染的一般過程如代碼8-5所示:

SkRegion是Skia的渲染區(qū)域類,是Surface Flinger里面計算可視區(qū)域的操作基本單位。

代碼:SkCanvas渲染的一般過程

void CursorRing::DrawRing(SkCanvas* canvas,const Vector< WebCore::IntRect>& rects, Flavor flavor)
    {
    unsigned    rectCount=rects.size();
    SkRegion    rgn;
    SkPath    path;
    for (unsigned i=0; i < rectCount; i++)
    {
        SkRect  r(rects[i]);
        SkIRect ir;
        r.round(&ir);
        ir.inset(-CURSOR_RING_OUTER_OUTSET, -CURSOR_RING_OUTER_OUTSET);
        rgn.op(ir, SkRegion::kUnion_Op);
    }
    rgn.getBoundaryPath(&path);
    SkPaint paint;
    paint.setAntiAlias(true);
    paint.setPathEffect(new SkCornerPathEffect(CURSOR_RING_ROUNDEDNESS))->unref();
    if (flavor >=NORMAL_ANIMATING) { // pressed
        paint.setColor(cursorPressedColors[flavor - NORMAL_ANIMATING]);
        canvas->drawPath(path, paint);
    }
    paint.setStyle(SkPaint::kStroke_Style);    //設(shè)置風(fēng)格
    paint.setStrokeWidth(CURSOR_RING_OUTER_DIAMETER);    //設(shè)置寬度
    paint.setColor(cursorOuterColors[flavor]);    //設(shè)置顏色
    canvas->drawPath(path, paint);    //執(zhí)行渲染
    paint.setStrokeWidth(CURSOR_RING_INNER_DIAMETER);
    paint.setColor(cursorInnerColors[flavor]);
    canvas->drawPath(path, paint);
    }

SkString為進(jìn)行字符串的渲染提供了一個輕量級的接口,通過引入?yún)⒖加洈?shù)機(jī)制減小了內(nèi)存的消耗,支持字符串的插入、合并、追加、互換、字體大小、編碼設(shè)置等操作。其默認(rèn)的編碼為UTF8,支持UTF16編碼。

SkIPoint在渲染一個點(diǎn)時需要(x,y)坐標(biāo)。支持點(diǎn)的旋轉(zhuǎn)、縮放、點(diǎn)間距離等操作。

 更多相關(guān)文章

·Android Skia 渲染概述
·Android Surface渲染管理
·Android LayerBuffer模式的layer渲染
·Android應(yīng)用程序之WebApp開發(fā)實(shí)戰(zhàn)
·從開發(fā)到盈利--安卓程序商業(yè)化之路