HarmonyOS 图片解码咨询

后置摄像头拍出来的照片,使用RGBA_8888进行解码,再绑定到openGL纹理上,显示是正常前,置摄像头拍出来的照片,同样的逻辑,图片会撕裂。想请教一下前置摄像头和后置摄像头拍出来的照片有什么不一样。解码逻辑如下:

const file = await fs.open(uri, fs.OpenMode.READ_ONLY);
const imageSource = image.createImageSource(file.fd);
const size = imageSource.getImageInfoSync(0).size
const pixelMap =
  await imageSource.createPixelMap({
    desiredPixelFormat: image.PixelMapFormat.RGBA_8888
  });

创建纹理逻辑如下:

auto createPixelStatus = OHOS::Media::OH_AccessPixels(env, pixelMap, &data);
if (createPixelStatus != OHOS::Media::OHOS_IMAGE_RESULT_SUCCESS) {
  OH_LOG_INFO(LOG_APP, "createTextureFail.");
  return 0;
}
GLuint texture = 0;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
glBindTexture(GL_TEXTURE_2D, 0);

换成BGRA_8888解码,图片可以正常显示,但是颜色通道不对。

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

1、通过OhosPixelMapInfos.rowSize获取stride。

2、gl绑定纹理时带上stride,glPixelStorei(GL_UNPACK_ROW_LENGTH, stride);注意:这里的第二个参数是以像素为单位的,而rowSize是以字节为单位的。

分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 音频编解码问题咨询
50浏览 • 1回复 待解决
HarmonyOS OH_AVCodec硬解码流程问题咨询
814浏览 • 1回复 待解决
图片解码能力支持哪些格式
1971浏览 • 1回复 待解决
HarmonyOS Image加载本地图片咨询
503浏览 • 1回复 待解决
图片解码支持的格式有哪些
1730浏览 • 1回复 待解决
HarmonyOS 关于GIF图片播放功能的咨询
70浏览 • 1回复 待解决
HarmonyOS保存图片到系统相册问题咨询
687浏览 • 1回复 待解决
HarmonyOS视频解码问题
738浏览 • 1回复 待解决
HarmonyOS hevc格式视频解码
330浏览 • 1回复 待解决
HarmonyOS uri编码解码问题
69浏览 • 1回复 待解决
HarmonyOS CBOR编解码问题
509浏览 • 1回复 待解决
HarmonyOS 视频编解码问题
36浏览 • 1回复 待解决
HarmonyOS native中svg解码异常
469浏览 • 1回复 待解决
HarmonyOS解码接口标准
446浏览 • 1回复 待解决
HarmonyOS AudioVivid音频解码和渲染
25浏览 • 1回复 待解决