Разрешить исключение загрузки типа в C # - PullRequest
1 голос
/ 12 мая 2011

В моем приложении для Windows Mobile 6.5 я пытаюсь создать эскиз с помощью метода. Но при вызове этого метода я получаю исключение typtload.

Может кто-нибудь, пожалуйста, дайте мне знать, как я могу решить эту проблемуНиже вставлен мой код.

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);
            }

        }

         }
}

Получение типа исключения в линии камеры. Мой палец (GetCamera.videoFilePath);

Пожалуйста, пересылайте ваши ценные предложения.

Спасибо взаранее:)

1 Ответ

0 голосов
/ 12 мая 2011

это могут быть статические переменные, которые не инициализируются вовремя

включите эту строку в ваш код:

static GetCamera() {}
...