c#中使用CopyFromScreen截图为什么截不到图片??? 20
Bitmapimg=newBitmap(10,10);Graphicsg=Graphics.FromImage(img);SizemySize=newSize(10,10...
Bitmap img = new Bitmap(10, 10);
Graphics g = Graphics.FromImage(img);
Size mySize = new Size(10, 10);
g.CopyFromScreen(this.PointToScreen(this.videoPanel.Location).X + 45,this.PointToScreen(this.videoPanel.Location).Y + 35, 0, 0, mySize);
img.save("c:/a.jpg");为什么保存是黑屏
videPanel面板中有图像 展开
Graphics g = Graphics.FromImage(img);
Size mySize = new Size(10, 10);
g.CopyFromScreen(this.PointToScreen(this.videoPanel.Location).X + 45,this.PointToScreen(this.videoPanel.Location).Y + 35, 0, 0, mySize);
img.save("c:/a.jpg");为什么保存是黑屏
videPanel面板中有图像 展开
2个回答
展开全部
因为视频输出一般都不是走GDI技术路线(GDI效率比较低,无法适应视频的播放速度),所以视频基本都是硬件加速实现的。所以普通的截屏是截图截不到的。
可能要用DirectX。
或者也可以用 系统自带的屏幕截图,调用API,模拟按键进行屏幕截图,实现。
可能要用DirectX。
或者也可以用 系统自带的屏幕截图,调用API,模拟按键进行屏幕截图,实现。
更多追问追答
追问
DirectX这个得安装到客户机上吧?那系统自带没用过,可否详细下不?急....
追答
DirectX,一般来说绝大多数电脑上都有安装,是系统自带的。
这个本来是微软用来给开发游戏的人去用的。
后来出现了DirectShow。据说比较适合视频。所以。。。
C#要操作DirectX比较困。除非自己P/Invoke。
即使是P/Invoke 也比较困难。好像要找到DLL然后根据API文档,导出DLL函数才OK。
参考资料: 原创
展开全部
如果猜得不错,你是在 videoPanel 中播放视频,希望可以截取指定大小的图像
依稀记得,播放设备和程序的窗口本身是无关,是系统在指定句柄的窗口上另外生成的。
所以,你可以尝试截取全屏幕的图像,然后转换坐标,再截取指定位置的图像。
依稀记得,播放设备和程序的窗口本身是无关,是系统在指定句柄的窗口上另外生成的。
所以,你可以尝试截取全屏幕的图像,然后转换坐标,再截取指定位置的图像。
追问
没用的,有视频的就会黑屏.
追答
// vs2010 / Win7 / dotNet 4.0
// 貌似我的可以截取,WMP 和 完美解码 测试成功,你试试
// cmd:Button 代码写在 Form_Load 里
cmd.Click += (obj, args) =>
{
var size = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size;
var bitmap = new System.Drawing.Bitmap(size.Width, size.Height);
var g = System.Drawing.Graphics.FromImage(bitmap);
g.CopyFromScreen(0, 0, 0, 0, size);
bitmap.Save("C:\\screen.png", System.Drawing.Imaging.ImageFormat.Png);
};
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询