yuv420 转bmp的方法

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;
        }
    }
}

点击下载此文件
如果你要实现更多YUV到BMP的转换,请使用
dirac-0.7.0  sf上可以搜到哦 . google里也可以的. 我就不上传了.
基本支持所有YUV方面的转换.
不过全部是exe方式的, 如果你打开win32目录的话,支持vs2003和vs2005 ,也支持其他c++编辑器
如果不会c,那就用我上面的方法弄就行了. 呵呵 . 
 

时间: 2024-11-02 10:36:48

yuv420 转bmp的方法的相关文章

超星格式转换BMP的方法

flywolf(mailto:flywolf@ynmail.com) 最近,我偶然发现了一个超星 -> BMP的方法. 首先,请下载最新的"超星3.4Beta 7",安装后,运行Delphi5,选择Component->Import ActiveX Control,然后,你会发现"Import ActiveX"中有一个选择为"Pdg2 Type Library(Version 1.0)".....,剩下的事不用我说了吧. 我的方法:

Winpe启动画面的修改方法

  Winpe现在是经常使用了,但你是否知道Winpe的启动画面也可以随心所欲呢?下面就跟着来操作一下吧. 一.首先需要一个工具软件ResHacker. 二.找到ntoskrnl.exe文件. 三.用ResHacker打开用来编辑的ntoskrnl.exe文件,找到第一项:位图12052,然后选择菜单保存为1.bmp.用同样方法把第八项(位图82052)也保存为8.bmp,同样保存位图18. 四.用Photoshop打开1.bmp文件,这时候图片是全黑的.接着选图像-->模式-->颜色表,载入

详解BMP木马_安全相关

首先说明这不是什么新的东西,但最近有人说我们没有,那就随便写编文章放上来了,大家自己试验一下. 何谓BMP网页木马?它和过去早就用臭了的MIME头漏洞的木马不同,MIME木马是把一个EXE文件用MIME编码为一个EML(OUT LOOK信件)文件,放到网页上利用IE和OE的编码漏洞实现自动下载和执行. 然而BMP木马就不同,它把一个EXE文件伪装成一个BMP图片文件,欺骗IE自动下载,再利用网页中的javascript脚本查找客户端的Internet临时文件夹,找到下载后的BMP文件,把它拷贝到

ASPImage组件制作水印的实现过程

过程 ASP使用组件 aspImage是ServerObjects站点上非常好的一个组件,它可以使我们利用Asp实现很多对于图形的处理功能,他的功能强大,如果你需要了解更详细的信息你可以访问它的官方网站,在这里就不讲如何使用这个组件了,我们在这里要讲的是如何实现这类组件,当然下面的例子中使用GDI+并不是实现组件图形处理的唯一方法,大家也可以自己试试其他的方法. 以下是实现过程 一.首先使用Visual C++的向导建立ATL项目 二.接下来添加一个ATL Active Server Page

C#视频监控系列(9):服务器端——数据捕获(抓图 + 录像)

前言 录像功能是监控系统中最重要的功能之一,除了本文的功能实现外,还需要你自己考虑合适的存储策略:存储大小.时间段. 存储盘符等. 正文 一.抓图 这个功能没有在VC++服务器端找到对应的代码,但是GOOGLE到了一段CSDN求助的代码: int ret=GetJpegImage(aa,bb,cc,dd); if(ret==0) { CString str; str.Format("ch%02d_%s.jpg",iLastSelect,csStartTime); FILE *pFile

怎么修改Winpe的启动画面

  Winpe现在是经常使用了,但你是否知道Winpe的启动画面也可以随心所欲呢?下面就跟着来操作一下吧. 一.首先需要一个工具软件ResHacker. 二.找到ntoskrnl.exe文件. 三.用ResHacker打开用来编辑的ntoskrnl.exe文件,找到第一项:位图12052,然后选择菜单保存为1.bmp.用同样方法把第八项(位图82052)也保存为8.bmp,同样保存位图18. 四.用Photoshop打开1.bmp文件,这时候图片是全黑的.接着选图像-->模式-->颜色表,载入

Winpe的启动画面可以修改吗

pe现在是经常使用了,但你是否知道Winpe的启动画面也可以随心所欲呢?下面就来操作一下吧. 一.首先需要一个工具软件ResHacker. 二.找到ntoskrnl.exe文件. 三.用ResHacker打开用来编辑的ntoskrnl.exe文件,找到第一项:位图12052,然后选择菜单保存为1.bmp.用同样方法把第八项(位图82052)也保存为8.bmp,同样保存位图18. 四.用Photoshop打开1.bmp文件,这时候图片是全黑的.接着选图像-->模式-->颜色表,载入16.act文

Winpe启动画面如何更换

  Winpe现在是经常在用,但你是否知道Winpe的启动画面也可以想是什么就是什么吗?下面就来教大家一些具体操作. 一.首先需要一个工具软件ResHacker. 二.找到ntoskrnl.exe文件. 三.用ResHacker打开用来编辑的ntoskrnl.exe文件,找到第一项:位图12052,然后选择菜单保存为1.bmp.用同样方法把第八项(位图82052)也保存为8.bmp,同样保存位图18. 四.用Photoshop打开1.bmp文件,这时候图片是全黑的.接着选图像-->模式-->颜

任意变换WinPE启动效果

  一.首先需要一个工具软件ResHacker.   二.找到ntoskrnl.exe文件.   三.用ResHacker打开用来编辑的ntoskrnl.exe文件,找到第一项:位图12052,然后选择菜单保存为1.bmp.用同样方法把第八项(位图82052)也保存为8.bmp,同样保存位图18.   四.用Photoshop打开1.bmp文件,这时候图片是全黑的.接着选图像-->模式-->颜色表,载入16.act文件,OK.现在应该可以看到图像了,打开18.bmp,同样方法显示了,然后用框的