在我的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);
}
}
}
}
在线路摄像头接收Typeloadexception.MyThumb(GetCamera.videoFilePath);
请转发您宝贵的建议。
提前致谢:)
答案 0 :(得分:0)
可能是静态变量没有按时初始化
在您的代码中包含此行:
static GetCamera() {}