cocos2d --- c++ 通过 sprite 显示摄像头数据解决方案(趟过的坑)

cocos2d 的渲染机制是单线程的,需要在主线程(UI线程)里进行渲染图像, 否则 图像无法渲染到cocos窗口上。

 

 

将需要使用的 sprite 放在 Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]() 方法里 实现,

Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]() {

auto visibleSize = Director::getInstance()->getVisibleSize();

auto origin = Director::getInstance()->getVisibleOrigin();

std::string china6 = "E:\\work\\showselfGame\\showselfGame\\proj.win32-turntable\\mifeng_release.win32\\turntable\\lansemeiyingbeijing.jpg";

GBKToUTF8(china6, "gbk", "utf-8");

Sprite* sprite = Sprite::create(china6);

Texture2D* texture = sprite->getTexture();

/*Sprite**/ m_sprite4 = Sprite::createWithTexture(texture);

m_sprite4->setPosition(Vec2(visibleSize / 2) + origin);

this->addChild(m_sprite4, 0);

});

 

然后在线程里 使用 Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]() 方法 进行处理显示图像。

Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]()

 

{

m_cameraManager.GetVedioData(m_srcBuf, m_curWidth, m_curHeight);

//SaveBMP(m_srcBuf, "D:\\pic\\test.bmp", m_curWidth, m_curHeight, 24);

if (m_srcBuf) {

m_sprite4->getTexture()->updateWithData(m_srcBuf, 0, 0, m_curWidth, m_curHeight);

}

 

//bool ret = false;

//Image *image1 = new Image;

//ret = image1->initWithImageFile("E:\\work\\showselfGame\\showselfGame\\proj.win32-turntable\\mifeng_release.win32\\turntable\\turntable_bk.png");

//sprite3->getTexture()->updateWithData(image1->getData(), 0, 0, 54, 69);

//UpdateCameraData();

 

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值