FourCC 作为 int C#

Posted

技术标签:

【中文标题】FourCC 作为 int C#【英文标题】:FourCC as int C# 【发布时间】:2013-05-30 16:55:36 【问题描述】:

我正在使用一个 SDK,它要求将 AVI 编解码器作为 FourCC 值的 8 位 int 表示形式传递。 FourCC 值是 WVC1,我尝试将 ASCII 转换为每个字符的相应 int 值,我认为这将是 87864301,但这是不正确的。

有谁知道有代表 FourCC 值的标准整数值集,或者有什么方法可以转换它?

【问题讨论】:

这有帮助吗:msdn.microsoft.com/en-us/library/windows/desktop/… 【参考方案1】:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd375802(v=vs.85).aspx 建议 FOURCC 的字符需要是十六进制值,并在转换之前反转。

这是一个使用与 YUY2 值匹配的示例控制台应用程序 (WVC1 = 31435657)。 更新了代码以包含大/小端和 GUID 转换。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FourCC

    class Program
    
        static void Main(string[] args)
        
            string fourCC = "YUY2";

            Console.WriteLine("Big endian value of 0 is 1", fourCC, ConvertFourCC(fourCC, toBigEndian:true));
            Console.WriteLine("Little endian value of 0 is 1", fourCC, ConvertFourCC(fourCC));
            Console.WriteLine("GUID value of 0 is 1", fourCC, ConvertFourCC(fourCC, toGuid:true));
            Console.ReadKey();

        

        static string ConvertFourCC(string fourCC, bool toBigEndian = false, bool toGuid = false)
        
            if (!String.IsNullOrWhiteSpace(fourCC))
            
                if (fourCC.Length != 4)
                
                    throw new FormatException("FOURCC length must be four characters");                    
                
                else
                
                    char[] c = fourCC.ToCharArray();

                    if (toBigEndian)
                    
                        return String.Format("0:X", (c[0] << 24| c[1] << 16 | c[2] << 8 | c[3]));
                    
                    else if (toGuid)
                    
                        return String.Format("0:X", (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0]) + "-0000-0010-8000-00AA00389B71";
                    
                    else
                    
                        return String.Format("0:X", (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0]);
                    
                
            
            return null;
        
    

【讨论】:

以上是关于FourCC 作为 int C#的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CV_CAP_PROP_FOURCC?

Natvis FourCC 可视化语法

Python OpenCV 将摄像头/视频写入视频文件

图像转视频

cv2.VideoWriter 不会使用fourcc h.264写入文件(使用罗技c920,python 2.7,windows 8)

Opencv视频读取和保存再次损坏