好,所以我有两个正在使用我的软件的摄像机。第一个是计算机网络摄像头。当我连接并运行此代码时:
Bitmap currentFrame = videoSourcePlayer.GetCurrentVideoFrame();
Graphics g = Graphics.FromImage(currentFrame);
g.DrawImage(currentFrame, videoSourcePlayer.imagex, videoSourcePlayer.imagey, videoSourcePlayer.imgWidth, videoSourcePlayer.imgHeight);
pictureBox1.Image = currentFrame;
return currentFrame;
网络摄像头工作正常。我可以复制缩放和平移。
但是当我连接到另一个凸轮并运行相同的代码时,出现此错误: HResult = 0x80131500 Message =无法从具有索引像素格式的图像创建Graphics对象。 源= System.Drawing 堆栈跟踪: 在System.Drawing.Graphics.FromImage(图像图像)
所以我尝试了这段代码:
private Bitmap CaptureScreen()
{
Bitmap originalBmp = videoSourcePlayer.GetCurrentVideoFrame();
// Create a blank bitmap with the same dimensions
Bitmap tempBitmap = new Bitmap(originalBmp.Width, originalBmp.Height);
// From this bitmap, the graphics can be obtained, because it has the right PixelFormat
using (Graphics g = Graphics.FromImage(tempBitmap))
{
g.DrawImage(originalBmp, videoSourcePlayer.imagex, videoSourcePlayer.imagey, videoSourcePlayer.imgWidth, videoSourcePlayer.imgHeight);
pictureBox1.Image = originalBmp;
return originalBmp;
}
}
该代码修复了运行时错误,但我摆脱了缩放问题。 我不知道为什么? 但我确实有一个缩放和平移功能,该功能可用于第一个代码块,但不适用于第二个代码块。
如何解决无法从具有索引像素格式运行时错误但保持缩放和平移的图像创建图形对象的问题?