捕获桌面截图作为矢量图像并放入剪贴板 [英] Capture desktop screenshot as vector image and place into clipboard

查看:140
本文介绍了捕获桌面截图作为矢量图像并放入剪贴板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个MFC应用程序,我需要捕获桌面和保存为矢量图像。

我可以将屏幕截图捕获为.BMP并使用以下代码写入剪贴板。

   
int
nScreenWidth = GetSystemMetrics( SM_CXSCREEN );

   
int nScreenHeight = GetSystemMetrics( SM_CYSCREEN );

    ;
HDC hDesktopDC = GetDC( 空白 );

    
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);

   
HBITMAP hCaptureBitmap = CreateCompatibleBitmap(hDesktopDC,

                            
nScreenWidth,nScreenHeight);

                            nScreenWidth, nScreenHeight);

<跨度>&NBSP;&NBSP;&NBSP;
HGDIOBJ old_obj = SelectObject(hCaptureDC,hCaptureBitmap);

   
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,

    BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,

          
hDesktopDC,0,0,
SRCCOPY | CAPTUREBLT );

           hDesktopDC,0,0,SRCCOPY|CAPTUREBLT);

 

<跨度>&NBSP;&NBSP;&NBSP;
//将位图保存到剪贴板

    // save bitmap to clipboard

   
OpenClipboard(
NULL );

    OpenClipboard(NULL);

   
EmptyClipboard();

    EmptyClipboard();

   
SetClipboardData(
CF_BITMAP ,hCaptureBitmap);

    SetClipboardData(CF_BITMAP, hCaptureBitmap);

   
CloseClipboard();

    CloseClipboard();

 

   
// clean up

   ;&NBSP;
SelectObject(hCaptureDC,old_obj);

    SelectObject(hCaptureDC, old_obj);

   
DeleteDC(hCaptureDC);

    DeleteDC(hCaptureDC);

   
ReleaseDC(
NULL ,hDesktopDC);

    ReleaseDC(NULL, hDesktopDC);

   
DeleteObject(hCaptureBitmap);

    DeleteObject(hCaptureBitmap);

但我正在寻找类似的代码,这些代码可以让我获得
将截图捕获为矢量图像和放入
剪贴板
;所以,我可以从剪贴板中读取EMF。

我尝试搜索MFC函数将光栅图像转换为剪贴板中的矢量图像,但我没有找到任何有用的东西。

先谢谢。

推荐答案

为纠正一个误解,EMF不是"矢量图像"。 它是一种特定于Microsoft的格式,基本上捕获了一系列GDI调用,包括矢量和光栅。 它最初是为内存有限的打印机创建的,因此他们可以"重放磁带"。多次创建几页的页面。

Just to correct one misunderstanding, an EMF is not a "vector image".  It is a Microsoft-specific format that essentially captures a series of GDI calls, both vector and raster.  It was originally created for printers with limited memory, so they could "replay the tape" several times to create pages in several pieces.

因此,如果你想要一个EMF文件,你可以这样做。 如果你真的需要一个矢量图像,那么你就会有一个很大的工作。 将任意栅格位图转换为矢量图像是一项非常重要的任务。 如果图像适合这种转换,Adobe Illustrator可以这样做,

So, if you want an EMF file, you can do that.  If you really need a vector image, then you have a big job ahead of you.  Converting an arbitrary raster bitmap to a vector image is an extremely non-trivial task.  Adobe Illustrator can do it, if the image lends itself to that kind of conversion.


这篇关于捕获桌面截图作为矢量图像并放入剪贴板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆