图片格式转换--从bmp到yuv420p

4 篇文章 0 订阅

前言

我记得以前写过,但是找不到了,再写一遍。
使用ffmpeg进行图片格式的转换。

步骤

目标

将一张图片从bmp(里面的格式是rgb24)转换到yuv420p格式。

原料

  1. ffmepg.exe
    ffmepg的库里提供了
  2. 一张bmp图片
    从网上下,或者利用windows自带的画图工具转换一下。

转换命令

将bmp图片1440_900_2.bmp(内部格式为rgb24) 转换为 1440_900_2.yuv

ffmpeg -s 1440x900 -pix_fmt rgb24 -i 1440_900_2.bmp -s 1440x900 -pix_fmt yuv420p 1440_900_2.yuv
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在chi-cdk中,可以使用MediaCodec类和MediaExtractor类来获取yuv420格式的图像。具体步骤如下: 1. 创建一个MediaExtractor对象并设置要解码的视频文件路径: ``` MediaExtractor extractor = new MediaExtractor(); extractor.setDataSource(filePath); ``` 2. 找到包含视频流的轨道: ``` int trackIndex = -1; for (int i = 0; i < extractor.getTrackCount(); i++) { MediaFormat format = extractor.getTrackFormat(i); String mime = format.getString(MediaFormat.KEY_MIME); if (mime.startsWith("video/")) { trackIndex = i; break; } } ``` 3. 选择并配置要解码的轨道: ``` extractor.selectTrack(trackIndex); MediaFormat format = extractor.getTrackFormat(trackIndex); String mime = format.getString(MediaFormat.KEY_MIME); MediaCodec codec = MediaCodec.createDecoderByType(mime); codec.configure(format, null, null, 0); codec.start(); ``` 4. 循环读取每个视频帧并解码: ``` ByteBuffer[] inputBuffers = codec.getInputBuffers(); ByteBuffer[] outputBuffers = codec.getOutputBuffers(); MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); boolean isEOS = false; while (!isEOS) { int inIndex = codec.dequeueInputBuffer(1000); if (inIndex >= 0) { ByteBuffer buffer = inputBuffers[inIndex]; int sampleSize = extractor.readSampleData(buffer, 0); if (sampleSize < 0) { codec.queueInputBuffer(inIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM); isEOS = true; } else { codec.queueInputBuffer(inIndex, 0, sampleSize, extractor.getSampleTime(), 0); extractor.advance(); } } int outIndex = codec.dequeueOutputBuffer(info, 1000); switch (outIndex) { case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED: outputBuffers = codec.getOutputBuffers(); break; case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED: format = codec.getOutputFormat(); break; case MediaCodec.INFO_TRY_AGAIN_LATER: break; default: ByteBuffer buffer = outputBuffers[outIndex]; // 这里的buffer即为yuv420的图像数据 codec.releaseOutputBuffer(outIndex, true); break; } } ``` 通过以上步骤,就可以获取到yuv420格式的图像数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值