一个测试surfaceflinger的小程序

来源:互联网 发布:灯光设计用什么软件 编辑:程序博客网 时间:2024/06/05 23:01

程序放在Android4.2的源码目录中能编译通过,也可以执行。本人所期待的结果是在android模拟器的屏幕上显示一个圆,但是实际上什么都没有显示!问题出在哪里?我把程序贴上!求大侠赐教!

Android.mk文件

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER"LOCAL_SRC_FILES:= \        main.cppLOCAL_SHARED_LIBRARIES := \                 libcutils \                 libandroidfw \                 libutils \                 libbinder \                 libui \                 libskia \                 libguiLOCAL_MODULE:= test-sfLOCAL_MODULE_TAGS := optionalinclude $(BUILD_EXECUTABLE)

main.cpp文件

#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <fcntl.h>#include <dirent.h>#include <unistd.h>#include <string.h>#include <linux/fb.h>#include <binder/IPCThreadState.h>#include <binder/ProcessState.h>#include <binder/IMemory.h>#include <binder/IPCThreadState.h>#include <binder/IServiceManager.h>#include <binder/MemoryHeapBase.h>#include <binder/MemoryBase.h>#include <binder/Binder.h>#include <utils/Log.h>#include <cutils/atomic.h>#include <cutils/properties.h>#include <utils/threads.h>#include <utils/Atomic.h>#include <utils/String16.h>#include <android_runtime/AndroidRuntime.h>#include <media/AudioTrack.h>#include <gui/Surface.h>#include <gui/ISurface.h>#include <gui/ISurfaceComposer.h>#include <gui/SurfaceComposerClient.h>#include <ui/DisplayInfo.h>#include <core/SkTypeface.h>#include <core/SkTemplates.h>#include <core/SkRegion.h>#include <core/SkDevice.h>#include <core/SkRect.h>#include <core/SkCanvas.h>#include <core/SkBitmap.h>#include <core/SkStream.h>//#include <images/SkImageDecoder.h>//#include <images/SkImageEncoder.h>using namespace android;int main(){        //sp<ProcessState> proc(ProcessState::self());        //ProcessState::self()->startThreadPool();        //IPCThreadState::self()->joinThreadPool();        sp<SurfaceControl> surfaceControl;        sp<SurfaceComposerClient> surfaceclient;        sp<Surface> surface;        SkBitmap bitmap;        Surface::SurfaceInfo info;        DisplayInfo display;        SkPaint paint;        paint.setARGB(255, 255, 0, 0);        surfaceclient = new SurfaceComposerClient();        surfaceclient->getDisplayInfo(0, &display);        surfaceControl = surfaceclient->createSurface(String8("test"), display.w, display.h, PIXEL_FORMAT_RGBA_8888);        surfaceclient->openGlobalTransaction();        surfaceControl->setLayer(0x40000000);        surfaceControl->setSize(display.w, display.h);        surfaceControl->setPosition(0, 0);        surfaceControl->show( );        surfaceclient->closeGlobalTransaction();        surface = surfaceControl->getSurface();        surface->lock(&info);        bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);        bitmap.setIsOpaque(true);        bitmap.setPixels(info.bits);        SkCanvas* canvas = new SkCanvas(bitmap);        canvas->drawCircle(640, 260, 100, paint);        surface->unlockAndPost();        sleep(3);        return 0;}


进展:

    上面的问题还是没能解决!原本想用skia来画图的,只是想验证surfaceflinger的功能!貌似android4.2用HWUI代替了skia。skia的接口没研究过,不会使用。移植工作进行中,暂时没时间去研究skia,所以只能从现有的东西上修改了!站在巨人的肩膀上,恩!翻了一下开机动画bootanimation的代码,发现它是用opengl接口画图的,无所谓,把它不必要的功能砍掉做成自己的测试程序,OK!成功显示自己的图片了!


原创粉丝点击