2011-05-12 48 views
1

在我的Windows Mobile 6.5应用程序中,我正在尝试使用方法创建缩略图。但是,在调用该方法时,我收到了typtload异常。在C#中解决typeload异常#

任何人都可以请让我知道我该如何解决这个问题。下面粘贴的是我的代码。

using System; 
using System.Linq; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using Newtonsoft.Json.Linq; 
using System.Runtime.Serialization; 
using System.Reflection; 
using System.IO; 
using System.Net; 
using Microsoft.WindowsMobile.Forms; 
using System.Diagnostics; 
using DirectShowLib; 
using System.Drawing.Imaging; 
using System.Runtime.InteropServices; 

namespace MyAppl 
{ 
    public partial class HomeForm : Form 
    { 

     public HomeForm() 
     { 
      InitializeComponent(); 
     } 


     public class GetCamera 
     { 
      public static String videoFilePath; 
      public static Bitmap myBitmap; 

      CameraCaptureDialog ccd = new CameraCaptureDialog(); 

      public void getCameraDialogue() 
      { 
       ccd.Mode = CameraCaptureMode.VideoWithAudio; 
       ccd.StillQuality = CameraCaptureStillQuality.Low; 
       ccd.Title = "sweet"; 
       ccd.VideoTimeLimit = TimeSpan.FromMinutes(60); 
       DialogResult dlgResult = ccd.ShowDialog(); 

       if (dlgResult == DialogResult.OK) 
       { 
        videoFilePath = ccd.FileName; 
       } 
      } 

      public void MyThumb(String path) 
      { 
       IGraphBuilder graphbuilder = (IGraphBuilder)new FilterGraph(); 
       ISampleGrabber samplegrabber = (ISampleGrabber)new SampleGrabber(); 
       graphbuilder.AddFilter((IBaseFilter)samplegrabber, "samplegrabber"); 

       AMMediaType mt = new AMMediaType(); 
       mt.majorType = MediaType.Video; 
       mt.subType = MediaSubType.RGB24; 
       mt.formatType = FormatType.VideoInfo; 
       samplegrabber.SetMediaType(mt); 
       int hr = graphbuilder.RenderFile(path, null); 

       IMediaEventEx mediaEvt = (IMediaEventEx)graphbuilder; 
       IMediaSeeking mediaSeek = (IMediaSeeking)graphbuilder; 
       IMediaControl mediaCtrl = (IMediaControl)graphbuilder; 
       IBasicAudio basicAudio = (IBasicAudio)graphbuilder; 
       IVideoWindow videoWin = (IVideoWindow)graphbuilder; 

       basicAudio.put_Volume(-10000); 
       videoWin.put_AutoShow(OABool.False); 

       samplegrabber.SetOneShot(true); 
       samplegrabber.SetBufferSamples(true); 

       long d = 0; 
       mediaSeek.GetDuration(out d); 
       long numSecs = d/10000000; 

       long secondstocapture = (long)(numSecs * 0.10f); 


       DsLong rtStart, rtStop; 
       rtStart = new DsLong(secondstocapture * 10000000); 
       rtStop = rtStart; 
       mediaSeek.SetPositions(rtStart, AMSeekingSeekingFlags.AbsolutePositioning, rtStop, AMSeekingSeekingFlags.AbsolutePositioning); 

       mediaCtrl.Run(); 
       EventCode evcode; 
       mediaEvt.WaitForCompletion(-1, out evcode); 

       VideoInfoHeader videoheader = new VideoInfoHeader(); 
       AMMediaType grab = new AMMediaType(); 
       samplegrabber.GetConnectedMediaType(grab); 
       videoheader = (VideoInfoHeader)Marshal.PtrToStructure(grab.formatPtr, 
       typeof(VideoInfoHeader)); 


       int width = videoheader.SrcRect.right; 
       int height = videoheader.SrcRect.bottom; 
       Bitmap b = new Bitmap(width, height, PixelFormat.Format24bppRgb); 

       uint bytesPerPixel = (uint)(24 >> 3); 
       uint extraBytes = ((uint)width * bytesPerPixel) % 4; 
       uint adjustedLineSize = bytesPerPixel * ((uint)width + extraBytes); 
       uint sizeOfImageData = (uint)(height) * adjustedLineSize; 


       System.Drawing.Imaging.BitmapData bd1 = b.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
       int bufsize = (int)sizeOfImageData; 
       int n = samplegrabber.GetCurrentBuffer(ref bufsize, bd1.Scan0); 
       b.UnlockBits(bd1); 
       //   b.RotateFlip(RotateFlipType.RotateNoneFlipY); 
       //  b.Save("C:\\aaa\\out.bmp"); 
       Marshal.ReleaseComObject(graphbuilder); 
       Marshal.ReleaseComObject(samplegrabber); 


       // return b; 

      } 

     } 

     private void pbRecord_Click(object sender, EventArgs e) 
     { 

      GetCamera camera = new GetCamera(); 
      camera.getCameraDialogue(); 

      if (GetCamera.videoFilePath != null) 
      { 
       camera.MyThumb(GetCamera.videoFilePath); 
      } 

     } 

     } 
} 

在线路camera.MyThumb(GetCamera.videoFilePath)接收Typeloadexception;

请转发您的宝贵建议。

感谢提前:)

回答

0

它可能是静态瓦尔时间没有得到初始化

包括这一行代码:

static GetCamera() {} 
+0

它不是working.I甚至试图移除参数,但同样isssue.Even再次启动一个新的新项目存在的问题。请让我知道是否有任何建议 – Remmyabhavan 2011-05-12 05:51:11

相关问题