<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java究竟怎么玩?

      天地程序已定棋,人間大數待變局

        博客園  :: 首頁  :: 新隨筆  :: 聯系 :: 訂閱 訂閱  :: 管理
      AVI英文全稱為Audio Video Interleaved,即音頻視頻交錯格式。它是一種將語音和影像同步組合在一起的文件格式。AVI支持256色和RLE壓縮,主要應用在多媒體光盤上,主要用來保存電視、電影等各種影像信息。

      在Windows系統中,借助于API之利,我們能夠輕易的實現AVI文件的分解與重組。下面,我給出一個C#版本的AVI分解示例。

      using System;
      using System.Drawing;
      using System.Runtime.InteropServices;
      using System.IO;

      namespace org.loon.util
      {
      /// <summary>
      /// org.loon.util.AVIUtil 用于AVI文件處理 
      /// </summary>

       public class AVIUtil{
                         [StructLayout(LayoutKind.Sequential, Pack 
      = 1)]
                             
      struct BITMAPFILEHEADER
                         
      {
                             
      public ushort bfType;
                             
      public uint bfSize;
                             
      public ushort bfReserved1;
                             
      public ushort bfReserved2;
                             
      public uint bfOffBits;
                         }


                         [StructLayout(LayoutKind.Sequential, Pack 
      = 1)]
                             
      struct BITMAPINFOHEADER
                         
      {
                             
      public uint biSize;
                             
      public int biWidth;
                             
      public int biHeight;
                             
      public ushort biPlanes;
                             
      public ushort biBitCount;
                             
      public uint biCompression;
                             
      public uint biSizeImage;
                             
      public int biXPelsPerMeter;
                             
      public int biYPelsPerMeter;
                             
      public uint biClrUsed;
                             
      public uint biClrImportant;
                             
      public const int BI_RGB = 0;
                         }


                         
      const uint DIB_RGB_COLORS = 0;

                         
      const uint DIB_PAL_COLORS = 1

                  
      /// <summary>
                  
      /// 對象轉換
                  
      /// </summary>
                  
      /// <param name="pBITMAPINFOHEADER"></param>
                  
      /// <returns></returns>

                         public static Bitmap ToBitmap(IntPtr pBITMAPINFOHEADER)
                         
      {
                             
      unsafe
                             
      {
                                 BITMAPINFOHEADER
      * pbmi = (BITMAPINFOHEADER*)pBITMAPINFOHEADER;
                                 BITMAPFILEHEADER pbmfi;
                                 pbmfi.bfType 
      = (int)'M' << 8 | (int)'B';
                                 pbmfi.bfOffBits 
      = (uint)(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));
                                 pbmfi.bfSize 
      = pbmfi.bfOffBits + pbmi->biSizeImage;

                                 MemoryStream stream 
      = new MemoryStream();
                                 BinaryWriter bw 
      = new BinaryWriter(stream);
                                 
      byte[] data = new byte[sizeof(BITMAPFILEHEADER)];
                                 Marshal.Copy((IntPtr)(
      &pbmfi), data, 0, data.Length);
                                 bw.Write(data);

                                 data 
      = new byte[sizeof(BITMAPINFOHEADER)];
                                 Marshal.Copy(pBITMAPINFOHEADER, data, 
      0, data.Length);
                                 bw.Write(data);

                                 data 
      = new byte[pbmi->biSizeImage];
                                 
      ++pbmi;
                                 Marshal.Copy((IntPtr)pbmi, data, 
      0, data.Length);
                                 bw.Write(data);
                                 bw.Flush();
                                 bw.BaseStream.Position 
      = 0;

                                 
      return new Bitmap(bw.BaseStream);
                             }

                         }

                     }


              
      /// <summary>
              
      /// AviFile,用于AVI文件處理
              
      /// </summary>

              public class AviFile : IDisposable
              
      {
                  
      const string AVIFILE32 = "AVIFIL32";
                  
      const int AVIGETFRAMEF_BESTDISPLAYFMT = 1;

                  
      internal enum OpenFileFlags : uint
                  
      {
                      OF_READ 
      = 0x00000000,
                      OF_WRITE 
      = 0x00000001,
                      OF_READWRITE 
      = 0x00000002,
                      OF_SHARE_COMPAT 
      = 0x00000000,
                      OF_SHARE_EXCLUSIVE 
      = 0x00000010,
                      OF_SHARE_DENY_WRITE 
      = 0x00000020,
                      OF_SHARE_DENY_READ 
      = 0x00000030,
                      OF_SHARE_DENY_NONE 
      = 0x00000040,
                      OF_PARSE 
      = 0x00000100,
                      OF_DELETE 
      = 0x00000200,
                      OF_VERIFY 
      = 0x00000400,
                      OF_CANCEL 
      = 0x00000800,
                      OF_CREATE 
      = 0x00001000,
                      OF_PROMPT 
      = 0x00002000,
                      OF_EXIST 
      = 0x00004000,
                      OF_REOPEN 
      = 0x00008000,
                  }



                  [DllImport(AVIFILE32)]
                  
      extern internal static void AVIFileInit();

                  [DllImport(AVIFILE32)]
                  
      extern internal static void AVIFileExit();

                  [DllImport(AVIFILE32)]
                  
      extern internal static uint AVIFileOpen(out IntPtr ppfile, string szFile, OpenFileFlags mode, IntPtr pclsidHandler);

                  [DllImport(AVIFILE32)]
                  
      extern internal static int AVIFileRelease(IntPtr pfile);

                  [DllImport(AVIFILE32)]
                  
      extern internal static uint AVIFileGetStream(IntPtr pfile, out IntPtr ppavi, uint fccType, int lParam);

                  [DllImport(AVIFILE32)]
                  
      extern internal static int AVIStreamRelease(IntPtr pavi);

                  [DllImport(AVIFILE32)]
                  
      extern internal static IntPtr AVIStreamGetFrameOpen(IntPtr pavi, int lpbiWanted);

                  [DllImport(AVIFILE32)]
                  
      extern internal static IntPtr AVIStreamGetFrame(IntPtr pgf, int lPos);

                  [DllImport(AVIFILE32)]
                  
      extern internal static int AVIStreamLength(IntPtr pavi);

                  [DllImport(AVIFILE32)]
                  
      extern internal static uint AVIStreamGetFrameClose(IntPtr pget);


                  
      static uint mmioFOURCC(char c0, char c1, char c2, char c3)
                  
      {
                      
      return (uint)c3 << 24 | (uint)c2 << 16 | (uint)c1 << 8 | (uint)c0;
                  }


                  
      static readonly uint streamtypeVIDEO = mmioFOURCC('v''i''d''s');
                  
      static readonly uint streamtypeAUDIO = mmioFOURCC('a''u''d''s');
                  
      static readonly uint streamtypeMIDI = mmioFOURCC('m''i''d''s');
                  
      static readonly uint streamtypeTEXT = mmioFOURCC('t''x''t''s');

                  IntPtr aviFile 
      = IntPtr.Zero;
                  IntPtr aviStream 
      = IntPtr.Zero;
                  
      bool disposed = false;

                  
      public static void Initialize()
                  
      {
                      AVIFileInit();
                  }


                  
      public static void Terminate()
                  
      {
                      AVIFileExit();
                  }


                  
      public AviFile(string filename)
                  
      {
                      
      uint result;
                      result 
      = AVIFileOpen(out aviFile, filename, OpenFileFlags.OF_READ, IntPtr.Zero);
                      
      if (result != 0)
                      
      {
                          Release();
                          
      throw new Exception("AVIFileOpen failure.");
                      }


                      result 
      = AVIFileGetStream(aviFile, out aviStream, streamtypeVIDEO, 0);
                      
      if (result != 0)
                      
      {
                          Release();
                          
      throw new Exception("AVIFileGetStream failure.");
                      }

                  }


                  
      ~AviFile()
                  
      {
                      Dispose(
      false);
                  }


                  
      void Release()
                  
      {
                      
      if (aviStream != IntPtr.Zero)
                      
      {
                          AVIStreamRelease(aviStream);
                          aviStream 
      = IntPtr.Zero;
                      }


                      
      if (aviFile != IntPtr.Zero)
                      
      {
                          AVIFileRelease(aviFile);
                          aviFile 
      = IntPtr.Zero;
                      }

                  }


                  
      public int GetMaxFrameCount()
                  
      {
                      
      if (aviStream == IntPtr.Zero)
                          
      throw new InvalidOperationException();
                      
      return AVIStreamLength(aviStream);
                  }


                  
      public Bitmap GetFrame(int no)
                  
      {
                      
      if (aviStream == IntPtr.Zero)
                          
      throw new InvalidOperationException();

                      IntPtr frame 
      = IntPtr.Zero;
                      
      try
                      
      {
                          frame 
      = AVIStreamGetFrameOpen(aviStream, AVIGETFRAMEF_BESTDISPLAYFMT);
                          IntPtr pbmi 
      = AVIStreamGetFrame(frame, no);
                          
      return org.loon.util.AVIUtil.ToBitmap(pbmi);

                      }

                      
      finally
                      
      {
                          
      if (frame != IntPtr.Zero)
                              AVIStreamGetFrameClose(frame);
                      }

                  }


                  
      protected void Dispose(bool disposing)
                  
      {
                      
      if (disposed)
                          
      return;
                      disposed 
      = true;
                      Release();
                  }


                  
      public void Dispose()
                  
      {
                      
      //不讓垃圾回收器終止指定對象(即不將指定對象調入終止序列中)
                      GC.SuppressFinalize(this);
                      Dispose(
      true);
                  }


              }

          
      }


      分解AVI:
                      string filename = "d:/test.avi";
                                      
      //初始化
                      org.loon.util.AviFile.Initialize();

                      
      using (org.loon.util.AviFile avi = new org.loon.util.AviFile(filename))
                      
      {
                          
      int max = avi.GetMaxFrameCount();
                          
      for (int i = 0; i < max; ++i)
                          
      {
                              Bitmap bmp 
      = avi.GetFrame(i);
                              bmp.Save(
      "d:/test/"++ ".bmp");
                              bmp.Dispose();
                          }

                      }

                                      
      //完成
                      org.loon.util.AviFile.Terminate();
      posted on 2008-01-14 10:44  cping  閱讀(702)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国精品91人妻无码一区二区三区| 久久99精品国产99久久6男男| 综合久久婷婷综合久久| 亚洲无av在线中文字幕| 亚洲精品一区久久久久一品av| 国产AV永久无码青青草原| 中文字幕精品av一区二区五区| 亚洲av乱码一区二区| 亚洲女初尝黑人巨| 中文字幕日本一区二区在线观看| 中文文字幕文字幕亚洲色| 五月综合激情婷婷六月| 精品久久精品久久精品久久| 亚洲真人无码永久在线| 精品综合久久久久久97| 人妻夜夜添夜夜无码av| 一区二区三区四区五区色| www久久只有这里有精品| 久热久视频免费在线观看| 人妻少妇偷人无码视频| 久久精品国产亚洲AV麻| 久热天堂在线视频精品伊人| 中文字幕日韩一区二区不卡| 久久香蕉国产线看观看猫咪av| 国产精品美女乱子伦高| 中文字幕国产精品一二区| 免费AV片在线观看网址| 欧美人与动人物牲交免费观看| 开心五月深深爱天天天操| 4虎四虎永久在线精品免费| 国产人妇三级视频在线观看| 亚洲中文一区二区av| 欧美牲交a免费| 久久大香萑太香蕉av黄软件| 亚洲精品一区二区天堂| 久久久精品94久久精品| 国产精品久久精品| 不卡免费一区二区日韩av| 亚洲精品久久久久成人2007| 好吊视频一区二区三区人妖| 国产二区三区不卡免费|