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
2024-12-25 10:30:10
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

1、通过OhosPixelMapInfos.rowSize获取stride。

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

分享
微博
QQ
微信
回复
2024-12-25 13:21:02
相关问题
HarmonyOS 音频编解码问题咨询
254浏览 • 1回复 待解决
HarmonyOS OH_AVCodec硬解码流程问题咨询
1108浏览 • 1回复 待解决
图片解码能力支持哪些格式
2156浏览 • 1回复 待解决
图片解码支持的格式有哪些
1973浏览 • 1回复 待解决
HarmonyOS 图片上传问题咨询
68浏览 • 1回复 待解决
HarmonyOS Image加载本地图片咨询
708浏览 • 1回复 待解决
HarmonyOS 关于GIF图片播放功能的咨询
206浏览 • 1回复 待解决
HarmonyOS保存图片到系统相册问题咨询
932浏览 • 1回复 待解决
HarmonyOS视频解码问题
845浏览 • 1回复 待解决
HarmonyOS 视频编解码问题
258浏览 • 1回复 待解决
HarmonyOS CBOR编解码问题
807浏览 • 1回复 待解决
HarmonyOS uri编码解码问题
189浏览 • 1回复 待解决
HarmonyOS hevc格式视频解码
524浏览 • 1回复 待解决
HarmonyOS Native HEVC 硬解码问题
772浏览 • 1回复 待解决
HarmonyOS 视频播放AVPlayer解码异常
282浏览 • 1回复 待解决
HarmonyOS base64解码报错
1319浏览 • 1回复 待解决
HarmonyOS base64编解码
278浏览 • 0回复 待解决