您的位置:首页 > 编程语言 > C语言/C++

Android2.3中C++编写的简单的绘图demo

2013-01-22 20:59 1696 查看
例子是仿照柯元旦的《Android内核剖析》中示例。

在external下新建文件夹MySurface, 里面编写两个文件,一个Android.mk,一个Welcome.cpp

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
	Welcome.cpp

LOCAL_SHARED_LIBRARIES := \
	libcutils \
	libutils \
	libui \
	libsurfaceflinger_client \
	libskia

LOCAL_C_INCLUDES += \
	$(LOCAL_PATH)/../../include/ui \
	$(LOCAL_PATH)/../../include/utils \
	external/skia/include/core \
	external/skia/include/utils 

LOCAL_MODULE:= hellosurface 
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)


#include <stdlib.h>
#include <stdio.h>

#include <surfaceflinger/SurfaceComposerClient.h>
#include <surfaceflinger/Surface.h>
#include <surfaceflinger/ISurfaceComposer.h>

#include <SkCanvas.h>
#include <SkBitmap.h>
#include <SkRegion.h>
using namespace android;

int main(int argc,char** argv)
{
    int pid=getpid();
    int x=176,y=144;

    sp<SurfaceComposerClient> videoClient=new SurfaceComposerClient;

    sp<SurfaceControl> spSurCtrl=videoClient->createSurface(pid,0,x,y,PIXEL_FORMAT_RGBA_8888,0);
//	sp<SurfaceControl> spSurCtrl=videoClient->createSurface(0,x,y,PIXEL_FORMAT_RGBA_8888,0);
	
    SurfaceControl* surContrl=spSurCtrl.get();

    const sp<Surface>& sur=surContrl->getSurface();

    videoClient->openTransaction();
    surContrl->setSize(x,y);
    surContrl->setPosition(10,10);
    surContrl->setLayer(100000);
    videoClient->closeTransaction();

    surContrl->show();

    SkBitmap *pmap=new SkBitmap();
    //pmap->setConfig(SkBitmap::KARGB_8888_Config,x,y);

    SkBitmap::Config enum_val=SkBitmap::kARGB_8888_Config;
    pmap->setConfig(enum_val,x,y);

    Surface::SurfaceInfo info;
    sur->lock(&info);
    pmap->setPixels(info.bits);
    sur->unlockAndPost();

    SkCanvas *canvas=new SkCanvas(*pmap);
    canvas->drawColor(0x80509a47,SkXfermode::kSrc_Mode);

    while(1);

    return 0;
}


在external/MySurface里mm,然后将生成的 out/target/product/generic/system/bin/hellosurface adb push 到/system/bin/ 下,

adb shell进入***D,在/system/bin/中 ./hellosurface,即可看到如下的效果:



通过C++编写的绘图,在2.3源码中亲测成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: