android canvas c++ 绘图

本文介绍了如何在Android 5.0及更高版本中利用C++库进行绘图操作,重点讲解了使用setInfo替代setConfig的方法,并提供了一张示例图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在android 下直接调用C++库绘图,直接看代码

android 5.0中使用setInfo代替setConfig

int main(int argc, char** argv)
{
	int width = 720, height = 480;
    // set up the thread-pool
    sp<ProcessState> proc(ProcessState::self());
    ProcessState::self()->startThreadPool();

    // create a client to surfaceflinger
    sp<SurfaceComposerClient> client = new SurfaceComposerClient();
    //DisplayoutBuffer display;
    //client->getDisplayoutBuffer(client->getBuiltInDisplay(HWC_DISPLAY_PRIMARY), &display);
	sp<IBinder> 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> 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;
}

附一张图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值