|
软件标签: yuv420转bmp 图像转换
yuv420转bmp工具免费版是一款方便用户进行yuv420 转bmp的便捷图像处理软件,让你能够快速的进行格式转换,能够方便用户能够更加清晰明确的观看图像,从而更好的查看图像,获得不错的使用效果,绿色资源网提供yuv420转bmp工具下载!
yuv420转bmp工具特色介绍
基本支持所有yuv方面的转换.不过全部是exe方式的, 如果你打开win32目录的话,支持vs2003和vs2005,也支持其他c++编辑器,如果不会c,那就用下面的方法弄就行了!本程序是由其他程序修改而来,为了避免麻烦,对其中一些没有用的地方并没有删除,但是这样不会影响使用。

yuv420 转bmp的方法
我找到了一个c写的exe ,但是c的水平我实在是不敢去修改那个源码,所以我干脆就调用这个dll,在c#里建立了下面这个类, 然后调用 y2b.exe 来转换, 而且不会显示出来那个黑屏.要知道怎么回事,就看代码吧!呵呵.
using system;
using system.collections.generic;
using system.text;
using system.diagnostics;
using system.drawing;
using system.io;
namespace jximage
{
public class yuv2bmp
{
/// <summary>
/// 检查程序配置是否正常, 比如exe路径,图片文件夹等. 一般情况下设置了路径和图片文件路径以及图片后,应该使用属性取得是否可以执行命令.
/// </summary>
public bool canuse
{
get
{
if (system.io.file.exists(system.windows.forms.application.startuppath + "//y2b.exe") )
{
return true;
}
return false;
}
}
private string bmpfile = null;
/// <summary>
///bmp文件名, 在成功执行转换后可以用此获得文件路径..
/// </summary>
/// <returns>返回文件名</returns>
public string getbmpfilename()
{
return bmpfile;
}
/// <summary>
/// bmp数据流,成功转换后可以从此获得流 .
/// </summary>
/// <returns>数据流形式的bmp </returns>
public memorystream getbmpfilestream()
{
try
{
return new memorystream(system.io.file.readallbytes(bmpfile));
}
catch (exception)
{
return null;
}
}
/// <summary>
/// image 成功转换后可以用此来获得文件.
/// </summary>
/// <returns>返回一个图片</returns>
public image getbmp()
{
try
{
return image.fromfile(bmpfile);
}
catch (exception)
{
return null;
}
}
/// <summary>
/// yuv转bmp
/// </summary>
/// <param name="yuvfilename">yuv文件名</param>
/// <returns>返回是否成功</returns>
public bool yuvtobmp(string yuvfilename)
{
if (canuse)
{
string ret = execute(yuvfilename);
if (ret.indexof("ok")>=0)//从0字符开始会有个ok
{
if (system.io.file.exists(yuvfilename.replace(".yuv", ".bmp")))
{
bmpfile = yuvfilename.replace(".yuv", ".bmp");
return true;
}
}
}
return false;
}
/// <summary>
/// 执行dos命令.
/// </summary>
/// <param name="canmand">命令</param>
/// <returns>返回执行结果 </returns>
public static string execute(string yuvfilename)
{
int milliseconds = 2 * 1000;//两秒
string output = ""; //输出字符串
if (yuvfilename != null && yuvfilename != "")
{
process process = new process(); //创建进程对象
processstartinfo startinfo = new processstartinfo();
startinfo.filename =system.windows.forms.application.startuppath +"//y2b.exe" ; //设定需要执行的命令
startinfo.arguments = "/h352 /v288 /""+yuvfilename+"/" /"" +yuvfilename.replace(".yuv",".
bmp"); //设定参数,其中的“/c”表示执行完命令后马上退出
startinfo.useshellexecute = false; //不使用系统外壳程序启动
startinfo.redirectstandardinput = false; //不重定向输入
startinfo.redirectstandardoutput = true; //重定向输出
startinfo.createnowindow = true; //不创建窗口
process.startinfo = startinfo;
try
{
if (process.start()) //开始进程
{
if (milliseconds == 0)
process.waitforexit(); //这里无限等待进程结束
else
process.waitforexit(milliseconds); //这里等待进程结束,等待时间为指定的毫秒
output = process.standardoutput.readtoend();//读取进程的输出
}
}
catch
{
}
finally
{
if (process != null)
process.close();
}
return output;
}
return null;
}
}
}
yuv420转bmp工具描述
1、读取akiyo_qcif.yuv yuv420文件,按帧读取,转rgb,并存储到bmp文件。
2、暂时实现读取一帧并存储一张bmp图片。若要读取yuv序列,写成循环方式即可。
3、生成的bmp文件还有一点小问题:图像的倒立的,而且红色偏多。
yuv是qcif分辨率。
红色的问题已经解决,采用的变换公式不正确。
但是还是有一些横纹,不知道是怎么回事。 .
估计是yuv到rgb的计算公式有点问题。
解决中图像倒立问题已经解决。
估计和uv的差值方式也有关系。
红色不知道是不是公式变换和rgb数值区间限制的时候产生的。

|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|