您当前的位置: 首页 >  c++

鱼儿-1226

暂无认证

  • 3浏览

    0关注

    1100博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

鱼儿-1226 发布时间:2020-08-27 10:46:52 ,浏览量:3

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();

 

});

关注
打赏
1604459285
查看更多评论
立即登录/注册

微信扫码登录

0.2440s