android 接调用skia库绘图


int main(int argc, char** argv)

{

int width = 720, height = 480;

// set up the thread-pool

sp proc(ProcessState::self());

ProcessState::self()->startThreadPool();

// create a client to surfaceflinger

sp client = new SurfaceComposerClient();

//DisplayoutBuffer display;

//client->getDisplayoutBuffer(client->getBuiltInDisplay(HWC_DISPLAY_PRIMARY), &display);

sp dtoken(SurfaceComposerClient::getBuiltInDisplay(

ISurfaceComposer::eDisplayIdMain));

DisplayInfo dinfo;

//获取屏幕的宽高等信息

status_t status = SurfaceComposerClient::getDisplayInfo(dtoken, &dinfo);

width = dinfo.w;

height = dinfo.h;

printf("w=%d,h=%d,xdpi=%f,ydpi=%f,fps=%f,ds=%f\n",

dinfo.w, dinfo.h, dinfo.xdpi, dinfo.ydpi, dinfo.fps, dinfo.density);

if (status)

return -1;

sp surfaceControl = client->createSurface(String8("testsurface"),

dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565, 0);

/**

*

* 绘制jpg图片

*/

SkFILEStream stream("/sdcard/test.jpg");

SkImageDecoder* codec = SkImageDecoder::Factory(&stream);

if (codec) {

SkBitmap * bitmap = new SkBitmap();

SkBitmap bmp;

stream.rewind();

codec->decode(&stream, &bmp, kRGB_565_SkColorType,

SkImageDecoder::kDecodePixels_Mode);

printf("image width=%d, high=%d\n", bmp.width(), bmp.height());

surface->lock(&outBuffer, NULL);

bpr = outBuffer.stride * bytesPerPixel(outBuffer.format);

//bitmap.setConfig(convertPixelFormat(outBuffer.format), 320, 240, bpr);

bitmap->setInfo(SkImageInfo::Make(width, height, kRGB_565_SkColorType, kUnpremul_SkAlphaType));

bitmap->setPixels(outBuffer.bits);

SkCanvas * canvas = new SkCanvas(*bitmap);

//dev = new SkDevice(bitmap);

//canvas.setDevice(dev);

//canvas->drawBitmap(bmp, SkIntToScalar(0), SkIntToScalar(0)); //绘制原图

canvas->drawBitmapRect(bmp, SkRect::MakeWH(1080, 1940), &paint); //缩放的方式绘制图片

//bitmap.

printf("postScale after width=%d, height=%d", bmp.width(), bmp.height());

surface->unlockAndPost();

sleep(3);

//delete dev;

}

delete bitmap;

delete canvas;

printf("exit!\n");

IPCThreadState::self()->joinThreadPool();

IPCThreadState::self()->stopProcess();

return 0;

}

GitHub - yrzroger/NativeSFDemo: 基于Android图形显示系统结构的Native演示小程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值