FFMpeg笔记(一) 使用FFmpeg将任意格式图片转换成任意格式图片
void SrcToDest(char* pSrc, char* pDest,unsigned int nSrcWidth, unsigned int nSrcHeight, AVPixelFormat srcFormat,
unsigned int nDestWidth, unsigned int nDestHeight, AVPixelFormat destFormat)
{
SwsContext* pConvert_ctx = NULL;
AVFrame* pFrameIn = NULL;
AVFrame* pFrameOut = NULL; // 分配一个AVFrame,注意必须使用avcodec_free_frame()释放
pFrameIn = avcodec_alloc_frame();
// 使用原始图片数据填充一个AVFrame
avpicture_fill((AVPicture*)pFrameIn, (uint8_t*)pSrc, srcFormat, nSrcWidth, nSrcHeight); pFrameOut = avcodec_alloc_frame();
avpicture_fill((AVPicture*)pFrameOut, (uint8_t*)pDest, destFormat, nDestWidth, nDestHeight);
// linesize[0]是每行的字节数,需根据具体格式调整
pFrameOut->linesize[] = nDestWidth * ; // 依据输入参数获取格式转换信息的结构体
pConvert_ctx = sws_getContext(nSrcWidth, nSrcHeight, srcFormat, \
nDestWidth, nDestHeight, destFormat, \
SWS_FAST_BILINEAR, NULL, NULL, NULL);
// 依据格式转换结构体,转换一帧数据
sws_scale(pConvert_ctx,
pFrameIn->data,
pFrameIn->linesize,
,
nSrcHeight,
pFrameOut->data,
pFrameOut->linesize); // 释放内存
avcodec_free_frame(&pFrameIn);
avcodec_free_frame(&pFrameOut);
sws_freeContext(pConvert_ctx);
}
注意转换的宽高不能搞错,否则非但不能转换正确,还有可能crash。附调试用的保存图片函数DumpImage,可以使用该函数查看原始数据是否正确或者格式转换是否成功:
BOOL DumpBmp(const char *filename, uint8_t *pRGBBuffer, int width, int height, int bpp)
{
BITMAPFILEHEADER bmpheader;
BITMAPINFOHEADER bmpinfo;
FILE *fp = NULL; fp = fopen(filename,"wb");
if( fp == NULL )
{
return FALSE;
} bmpheader.bfType = ('M' <<)|'B';
bmpheader.bfReserved1 = ;
bmpheader.bfReserved2 = ;
bmpheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmpheader.bfSize = bmpheader.bfOffBits + width*height*bpp/; bmpinfo.biSize = sizeof(BITMAPINFOHEADER);
bmpinfo.biWidth = width;
bmpinfo.biHeight = - height;
bmpinfo.biPlanes = ;
bmpinfo.biBitCount = bpp;
bmpinfo.biCompression = BI_RGB;
bmpinfo.biSizeImage = ;
bmpinfo.biXPelsPerMeter = ;
bmpinfo.biYPelsPerMeter = ;
bmpinfo.biClrUsed = ;
bmpinfo.biClrImportant = ; fwrite(&bmpheader,sizeof(BITMAPFILEHEADER),,fp);
fwrite(&bmpinfo,sizeof(BITMAPINFOHEADER),,fp);
fwrite(pRGBBuffer,width*height*bpp/,,fp);
fclose(fp);
fp = NULL; return TRUE;
}
char *pBmpFile = "DumpTest.bmp";
DumpBmp(pBmpFile, (uint8_t*)&bufferVector[0],
DEST_WIDTH_DEFAULT, DEST_HEIGHT_DEFAULT, 32);
FFMpeg笔记(一) 使用FFmpeg将任意格式图片转换成任意格式图片的更多相关文章
- [转] 将DOS格式文本文件转换成UNIX格式
点击此处阅读原文 用途说明 dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter).DOS下的文本文 ...
- ABBYY如何把图片转换成pdf格式
在制作工作文件的时候,有时候会遇到需要进行文件格式转换的情况,比较常见的文件格式转换就包含了Office与pdf格式之间的转换.但除此之外,图片与pdf格式也是可以进行转换的,那么图片要怎么操作,才能 ...
- ASP:GB2312格式文本文件转换成UTF-8格式
'-------------------------------------------------'函数名称:gb2utf_file'作用:利用AdoDb.Stream对象来把GB2312格式文本文 ...
- centos下 将(jgp、png)图片转换成webp格式
由于项目要求需要将jpg.png类型的图片 转换成webp格式,最开始使用了php gd类库里 imagewebp 方法实现,结果发现转换成的webp格式文件会偶尔出现空白内容的情况.像创建了一个透 ...
- .net amr格式文件转换成mp3格式文件的方法
前言:winform端对于音频文件的格式多有限制,大多数不支持amr格式的文件的播放.但是,手机端传过来的音频文件大多数是amr格式的文件,所以,要想在winform客户端支持音频文件的播放,可以通过 ...
- 【转】qlv文件如何转换成mp4 怎样把下载好的qlv格式视频转换成MP4格式
狸窝 复制 收藏 保存到桌面 快速找教程方案 反馈需求 社会主义核心价值观 客服QQ41442901 马上注册 升级VIP 对于视频文件之间的转换问题,我也已经是无力吐槽了,每个 ...
- TXT电子书格式怎样转换成epub格式
怎样将TXT电子书格式转换成epub格式呢?因为很多时候不同的阅读器所支持的电子书格式是有所不同,所以电子书格式转换的问题,在生活中也是会经常出现的问题.如果我们需要将TXT电子书格式转换成epub格 ...
- Flv视频格式如何转换成MP4格式
如何将flv视频格式转换成MP4格式呢?随着现在视频格式的不断多样化,视频格式转换的问题也成了现在生活中常见的问题,那么我们应该怎样将flv视频格式转换成MP4格式呢?下面我们就一起来看一下吧. 操作 ...
- 如何将.jpg图片 转换成.eps 格式图片
在使用latex写作论文的时候,需要插入一些图片,但是往往有些图片不是eps格式的.虽然网上有如何插入jpg格式的图片方法,但是经过我实验后发现都不太管用.最后找到一个比较靠谱的方法,使用latx本身 ...
随机推荐
- Checkpoint not complete
Checkpoint not complete Current log# 2 seq# 876 mem# 0: +DATA/tykfdb/onlinelog/group_2.258.983586883 ...
- Elixir木蚂蚁支付服务器验签名方法
官方范例为java public boolean verify(String sign , String appKey , String orderId) throws UnsupportedEnco ...
- Dynamics 365 Customer Engagement 中对API的调整内容分享
当前版本中弃用了以下客户端 API 以重新组织 Xrm 客户端 API 对象模型,从而更好地满足以下需求:使用同一客户端脚本而不必基于上下文或基于运行这些脚本的客户端(Web 客户端或新的统一接口)来 ...
- Pig安装与应用
1. 参考说明 参考文档: http://pig.apache.org/docs/r0.17.0/start.html#build 2. 安装环境说明 2.1. 环境说明 CentOS7.4+ ...
- Elasticsearch入坑指南之RESTful API
Elasticsearch入坑指南之RESTful API Tags:Elasticsearch ES为开发者提供了非常丰富的基于Http协议的Rest API,通过简单的Rest请求,就可以实现非常 ...
- MySQL案例07:MySQL5.7并发复制隐式bug
我们MySQL线上环境大部分使用的是5.7.18的版本,这个版本已修复了很多bug,但针对主从复制的bug还是有很多的,尤其是一些组复制.并行复制的bug尤为突出,在5.7.19版本有做相应改善和修复 ...
- C# 输入一个整数,求质因数
质数,质因数 应该都了解,在这里不过多解释,直接上代码: List<int> results = new List<int>(); int number = Int32.Par ...
- [控件] 心形加载的view
心形加载的view 效果: 素材图片: 源码: StarView.h 与 StarView.m // // StarView.h // Star // // Created by XianMingYo ...
- Python学习---IO的异步[asyncio模块(no-http)]
Asyncio进行异步IO请求操作: 1. @asyncio.coroutine 装饰任务函数 2. 函数内配合yield from 和装饰器@asyncio.coroutine 配合使用[固定格式 ...
- 铁乐学python27_模块学习2
大部份内容摘自博客http://www.cnblogs.com/Eva-J/ collections模块 在内置数据类型(dict.list.set.tuple)的基础上, collections模块 ...