zoukankan      html  css  js  c++  java
  • ORM映射框架总结Flash 处理

    代码
      1 /**
      2  * 
      3  * 2009-4-17
      4  * 
      5  * 
      6  * 根据flash读取其宽度和高度
      7  * */
      8 using System;
      9 using System.Collections.Generic;
     10 using System.Linq;
     11 using System.Text;
     12 using System.IO;
     13 using System.Collections;
     14 
     15 namespace CommonData.Flash
     16 {
     17     [Serializable]
     18     public partial class FlashInfo
     19     {
     20         private int width, height, version, frameCount, fileLength;
     21         private float frameRate;
     22         private bool isCompressed;
     23 
     24         public FlashInfo(string filename)
     25         {
     26             if (!File.Exists(filename))
     27             {
     28                 throw new FileNotFoundException(filename);
     29             }
     30             FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
     31             BinaryReader reader = new BinaryReader(stream);
     32             try
     33             {
     34                 if (stream.Length < 8)
     35                 {
     36                     throw new InvalidDataException("文件不是 Flash 文件格式");
     37                 }
     38                 string flashMark = new string(reader.ReadChars(3));
     39                 if (flashMark != "FWS" && flashMark != "CWS")
     40                 {
     41                     throw new InvalidDataException("文件不是 Flash 文件格式");
     42                 }
     43                 isCompressed = flashMark == "CWS";
     44                 version = Convert.ToInt32(reader.ReadByte());
     45                 fileLength = reader.ReadInt32();
     46                 byte[] dataPart = new byte[stream.Length - 8];
     47                 reader.Read(dataPart, 0, dataPart.Length);
     48                 MemoryStream dataStream = new MemoryStream(dataPart);
     49                 try
     50                 {
     51                     if (isCompressed)
     52                     {
     53                         MemoryStream outStream = new MemoryStream();
     54                         zlib.ZOutputStream outZStream = new zlib.ZOutputStream(outStream);
     55                         CopyStream(dataStream, outZStream);
     56                         outStream.Position = 0;
     57                         ProcessCompressedPart(outStream);
     58                         outZStream.Close();
     59                         outStream.Close();
     60                     }
     61                     else
     62                         ProcessCompressedPart(dataStream);
     63                 }
     64                 finally
     65                 {
     66                     dataStream.Close();
     67                 }
     68             }
     69             finally
     70             {
     71                 reader.Close();
     72                 stream.Close();
     73             }
     74         }
     75 
     76         private void ProcessCompressedPart(MemoryStream stream)
     77         {
     78             BinaryReader reader = new BinaryReader(stream);
     79             try
     80             {
     81                 byte[] rect;
     82                 int nbits, totalBits, totalBytes;
     83                 nbits = reader.ReadByte() >> 3;
     84                 totalBits = nbits * 4 + 5;
     85                 totalBytes = totalBits / 8;
     86                 if (totalBits % 8 != 0)
     87                 {
     88                     totalBytes++;
     89                 }
     90                 reader.BaseStream.Seek(-1, SeekOrigin.Current);
     91                 rect = reader.ReadBytes(totalBytes);
     92                 frameRate = float.Parse(string.Format("{1}.{0}", reader.ReadByte(), reader.ReadByte()));
     93                 frameCount = Convert.ToInt32(reader.ReadInt16());
     94                 BitArray bits = new BitArray(rect);
     95                 bool[] reversedBits = new bool[bits.Length];
     96                 for (int i = 0; i < totalBytes; i++)
     97                 {
     98                     int count = 7;
     99                     for (int j = 8 * i; j < 8 * (i + 1); j++)
    100                     {
    101                         reversedBits[j + count] = bits[j];
    102                         count -= 2;
    103                     }
    104                 }
    105                 bits = new BitArray(reversedBits);
    106                 StringBuilder sbField = new StringBuilder(bits.Length);
    107                 for (int i = 0; i < bits.Length; i++)
    108                     sbField.Append(bits[i] ? "1" : "0");
    109                 string result = sbField.ToString();
    110                 string widthBinary = result.Substring(nbits + 5, nbits);
    111                 string heightBinary = result.Substring(3 * nbits + 5, nbits);
    112                 width = Convert.ToInt32(FlashInfo.BinaryToInt64(widthBinary) / 20);
    113                 height = Convert.ToInt32(FlashInfo.BinaryToInt64(heightBinary) / 20);
    114             }
    115             finally
    116             {
    117                 reader.Close();
    118             }
    119         }
    120 
    121         private static long BinaryToInt64(string binaryString)
    122         {
    123             if (string.IsNullOrEmpty(binaryString))
    124                 throw new ArgumentNullException();
    125             long result = 0;
    126             for (int i = 0; i < binaryString.Length; i++)
    127             {
    128                 result = result * 2;
    129                 if (binaryString[i] == '1')
    130                     result++;
    131             }
    132             return result;
    133         }
    134 
    135         public int Width
    136         {
    137             get
    138             {
    139                 return this.width;
    140             }
    141         }
    142 
    143         public int Height
    144         {
    145             get
    146             {
    147                 return this.height;
    148             }
    149         }
    150 
    151         public int FileLength
    152         {
    153             get
    154             {
    155                 return this.fileLength;
    156             }
    157         }
    158 
    159         public int Version
    160         {
    161             get
    162             {
    163                 return this.version;
    164             }
    165         }
    166 
    167         public float FrameRate
    168         {
    169             get
    170             {
    171                 return this.frameRate;
    172             }
    173         }
    174 
    175         public int FrameCount
    176         {
    177             get
    178             {
    179                 return this.frameCount;
    180             }
    181         }
    182 
    183         public bool IsCompressed
    184         {
    185             get
    186             {
    187                 return this.isCompressed;
    188             }
    189         }
    190 
    191         public static void CopyStream(System.IO.Stream input, System.IO.Stream output)
    192         {
    193             byte[] buffer = new byte[2000];
    194             int len;
    195             while ((len = input.Read(buffer, 02000)) > 0)
    196             {
    197                 output.Write(buffer, 0, len);
    198             }
    199             output.Flush();
    200         }
    201     }
    202 }
    203 

      这个类用于处理Flash文件的,可以获得falsh 的一些相关信息。这里需要一个插件的处理 zlib.net.dll。 可以到网上去下载

      

  • 相关阅读:
    解决Maven项目 Missing artifact jdk.tools:jdk.tools:1.7的错误
    Hive三种不同的数据导出的方式
    【万字总结】图解堆算法、链表、栈与队列(多图预警)
    精心收集的Hadoop学习资料(持续更新)
    [大牛翻译系列]Hadoop 翻译文章索引
    sql server代理服务无法启动(SQL Agent):OpenSQLServerInstanceRegKey:GetRegKeyAccessMask failed (reason: 2).
    【转】sql server迁移到mysql
    linux shell中的EOF
    yum源出问题,rpmdb: BDB0113 Thread/process 17276/140338032428864 failed: BDB1507 Thread died in Berkeley DB library
    linux网卡出现问题:Job for network.service failed because the control process exited with error code问题
  • 原文地址:https://www.cnblogs.com/qingyuan/p/1637840.html
Copyright © 2011-2022 走看看