• 大小: 12KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C#
  • 标签: c#  

资源简介

海康H.264解码 yv12转换成rgb格式

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
using System.IO;

namespace NetViewApp
{
    public class YV12ToBMP
    {
        ///BMP文件头结构
        [StructLayout(LayoutKind.Sequential)]
        public struct BITMAPINFOHEADER
        {
            [MarshalAs(UnmanagedType.I4)]
            public int biSize;

            [MarshalAs(UnmanagedType.I4)]
            public Int32 biWidth;

            [MarshalAs(UnmanagedType.I4)]
            public Int32 biHeight;

            [MarshalAs(UnmanagedType.I2)]
            public short biPlanes;

            [MarshalAs(UnmanagedType.I2)]
            public short biBitCount;

            [MarshalAs(UnmanagedType.I4)]
            public UInt32 biCompression;

            [MarshalAs(UnmanagedType.I4)]
            public UInt32 biSizeImage;

            [MarshalAs(UnmanagedType.I4)]
            public Int32 biXPelsPerMeter;

            [MarshalAs(UnmanagedType.I4)]
            public Int32 biYPelsPerMeter;

            [MarshalAs(UnmanagedType.I4)]
            public UInt32 biClrUsed;

            [MarshalAs(UnmanagedType.I4)]
            public UInt32 biClrImportant;
        }

        public BITMAPINFOHEADER BMPInfoHead()
        {
            BITMAPINFOHEADER myheader = new BITMAPINFOHEADER();
            myheader.biSize = 40;
            myheader.biPlanes = 1;
            myheader.biBitCount = 24;
            myheader.biCompression = 0;
            myheader.biWidth = width;
            myheader.biHeight = -height;  // bmp.Height;
            //myheader.biSizeImage = (uint)rgb24.Length;
            //myheader.biXPelsPerMeter = 0;
            //myheader.biYPelsPerMeter = 0;
            //myheader.biClrUsed = 0;
            //myheader.biClrImportant = 0;
            
            return myheader;

            //结构体指针用法
            //IntPtr pp = Marshal.AllocHGlobal(Marshal.SizeOf(myheader));
            //Marshal.StructureToPtr(myheader pp true);
            //Marshal.FreeHGlobal(pp);
        }

        private int width;
        private int height;
        private int length;
        private int v;  //v值的起始位置
        private int u;  //u值的起始位置

        private int[] Table_fv1;
        private int[] Table_fv2;
        private int[] Table_fu1;
        private int[] Table_fu2;
        private int[] rgb = new int[3];
        
        private int rdif invgdif bdif;
        private int m n i j hfWidth;
        private bool addHalf = true;
        private int py;
        private int pos pos1;//dopod 595 图像调整
        private byte temp;
        private int bytePerLine;

        private byte[] rgb24;
        public YV12ToBMP(int iWidth int iHeight)
        {
            Table_fv1 = new int[256] { -180 -179 -177 -176 -174 -173 -172 -170 -169 -167 -166 -165 -163 -162 -160 -159 -158 -156 -155 -153 -152 -151 
         

评论

共有 条评论