【发布时间】:2013-08-06 09:47:46
【问题描述】:
我想知道是否可以截取屏幕截图,并且仅在与上一张不同时才保留它。
所以目前我正在使用这个功能。
private static MemoryStream PrintWindow(string prcname)
{
IntPtr hwnd;
using (var proc = Process.GetProcessesByName(prcname)[0])
{
hwnd = proc.MainWindowHandle;
}
Rect rc;
NativeMethods.GetWindowRect(hwnd, out rc);
using (Bitmap bmp = new Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb))
{
using (Graphics gfxBmp = Graphics.FromImage(bmp))
{
IntPtr hdcBitmap = gfxBmp.GetHdc();
try
{
NativeMethods.PrintWindow(hwnd, hdcBitmap, 0);
}
finally
{
gfxBmp.ReleaseHdc(hdcBitmap);
}
}
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
return ms;
}
}
然后我将图像通过网络发送并显示在另一侧。
现在,我想知道是否可以在拍摄新图像时发送。 或者好吧,不是新的,而是另一个图像。假设它需要 10 张图像,并且所有图像看起来都完全相同,并且没有必要使用所有这 10 张图像并发送它们,因为对方可以在最后一张图像上“暂停”直到出现了一个新图像。
希望你能理解我在这里要解释的内容。
【问题讨论】:
-
如果你想要一些功能来检查两个位图是否相同,请检查这个:stackoverflow.com/questions/2031217/…
-
图片不一样怎么办?文件大小?图片?如果是后者,那么性能开销可能比仅仅显示新图像更大
-
只比较大小,应该非常快吧?只是有一个 int 或具有图像长度的东西,然后将其与下一张图像进行比较,如果相同则将其丢弃,如果没有,则将该大小赋予 int。
-
好吧,我自己解决了这个问题