分类

安卓应用安卓游戏攻略资讯

图像转换

YUV420转BMP工具

YUV420转BMP工具 绿色版

大小:25 KB

语言:简体中文系统:WinXP, Win2003, Vista, Win7, Win8, Win10

类别:图像转换时间:2018-09-28

YUV420转BMP是一款好用的yuv420转bmp工具,主要用于将yuv420转化成bmp图片格式,从而更加清楚的查看图像,支持vs2003和vs2005。软件功能强大,需要懂编程的朋友才可以使用。需要的朋友可以下载!

YUV420格式数据介绍

YUV,分为三个分量,“Y”表示明亮度,也就是灰度值;“U"和”V"表示的则是色度,作用是描述影像色彩饱和度,用于指定像素的颜色。YUV主流的采样方式有三种:YUV4:4:4,YUV4:2:2,YUV4:2:0,这里主要介绍下YUV420。

在YUV420中,一个像素点对应一个Y,一个2X2的小方块对应一个U和V。对于所有YUV420图像,它们的Y值排列是完全相同的,因为只有Y的图像就是灰度图像。YUV420又分为YUV420SP与YUV420P这两种,这两种格式的Y分布是相同的,区别在于UV:YUV420p它是先把U存放完后,再存放V,也就是说UV它们是连续的;而YUV420sp它是UV、UV这样交替存放的。(他们的内存分布图如下,左是YUV420sp,右是YUV420p)

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

{

///

/// 检查程序配置是否正常, 比如exe路径,图片文件夹等. 一般情况下设置了路径和图片文件路径以及图片后,应该使用属性取得是否可以执行命令.

///

public bool CanUse

{

get

{

if (System.IO.File.Exists(System.Windows.Forms.Application.StartupPath + "//Y2B.exe") )

{

return true;

}

return false;

}

}

private string bmpfile = null;

///

/// BMP文件名, 在成功执行转换后可以用此获得文件路径..

///

/// 返回文件名

public string GetBmpFileName()

{

return bmpfile;

}

///

/// BMP数据流,成功转换后可以从此获得流 .

///

/// 数据流形式的BMP

public MemoryStream GetBmpFileStream()

{

try

{

return new MemoryStream(System.IO.File.ReadAllBytes(bmpfile));

}

catch (Exception)

{

return null;

}

}

///

/// Image 成功转换后可以用此来获得文件.

///

/// 返回一个图片

public Image GetBmp()

{

try

{

return Image.FromFile(bmpfile);

}

catch (Exception)

{

return null;

}

}

///

/// YUV转BMP

///

///YUV文件名

/// 返回是否成功

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;

}

///

/// 执行DOS命令.

///

///命令

/// 返回执行结果

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;

}

}

}

展开

猜您喜欢

同类推荐

网友评论