gcc 4.7.2
c89
ImageMagick-6.8.0-4
您好,
我正在尝试使用imagemagick API拍摄屏幕截图。我已下载,编译和安装了标头和库。
但是,我在文档中看不到api调用屏幕截图。我将链接并包含标题,以便我可以从我的c程序中调用api。我只想要用来执行此操作的函数的名称。
有人能指出我正确的方向吗? imagemagick可以截取屏幕截图吗?
非常感谢先进,
答案 0 :(得分:20)
如果你想要一个没有刺激的屏幕抓取;您可以通过在MagickReadImage
中传递“ x:root ”作为源参数来调用ImageMagick的导入命令。 x: format通过传递pid
或窗口标签,允许完整的屏幕截图或单个窗口。额外的modifiers可以捕获区域&寻呼。
#include <wand/MagickWand.h>
int main(int argc, char **argv)
{
MagickWandGenesis();
MagickWand *wand = NULL;
wand = NewMagickWand();
MagickReadImage(wand,"x:root"); // <-- Invoke ImportImageCommand
MagickWriteImage(wand,"screen_shot.png");
if(wand)wand = DestroyMagickWand(wand);
MagickWandTerminus();
return 0;
}
在wand
个库之外,magick/xwindow.h
允许您使用XImportImage
,XImportInfo
&amp; XGetImportInfo
方法。您可以在ImageMagick的源文件wand/import.c中检查这些方法的工作原理。
MagickWand还包括PixelWand;其中,可以迭代内存中的图像指针。多一点工作,但更大的灵活性。
#include <stdio.h>
#include <wand/MagickWand.h>
#include <X11/Xlib.h>
int main(int argc, char **argv) {
int x,y;
unsigned long pixel;
char hex[128];
// X11 items
Display *display = XOpenDisplay(NULL);
Window root = DefaultRootWindow(display);
XWindowAttributes attr;
XGetWindowAttributes(display, root, &attr);
// MagickWand items
MagickWand *wand = NULL;
PixelWand *pwand = NULL;
PixelIterator *pitr = NULL;
PixelWand **wand_pixels = NULL;
// Set-up Wand
MagickWandGenesis();
pwand = NewPixelWand();
PixelSetColor(pwand,"white"); // Set default;
wand = NewMagickWand();
MagickNewImage(wand,attr.width,attr.height,pwand);
pitr = NewPixelIterator(wand);
// Get image from display server
XImage *image = XGetImage(display,root, 0,0 ,
attr.width, attr.height,
XAllPlanes(), ZPixmap);
unsigned long nwands; // May also be size_t
for (y=0; y < image->height; y++) {
wand_pixels=PixelGetNextIteratorRow(pitr,&nwands);
for ( x=0; x < image->width; x++) {
pixel = XGetPixel(image,x,y);
sprintf(hex, "#%02x%02x%02x",
pixel>>16, // Red
(pixel&0x00ff00)>>8, // Green
pixel&0x0000ff // Blue
);
PixelSetColor(wand_pixels[x],hex);
}
(void) PixelSyncIterator(pitr);
}
// Write to disk
MagickWriteImages(wand,"screen_test.png");
// Clean-Up
XDestroyImage(image);
pitr=DestroyPixelIterator(pitr);
wand=DestroyMagickWand(wand);
MagickWandTerminus();
XCloseDisplay(display);
return 0;
}
确保ImageMagick能够连接到您的显示系统。尝试使用一些import
CLI命令来验证本地安装是否正常。 This question就是一个很好的例子。
import -display localhost:0.0 -window root test_out.png
import -display ::0 -window root test_out.png
import -display :0.0 -window root test_out.png
import -display :0 -window root test_out.png
答案 1 :(得分:2)
cli程序import
可以通过以下方式运行屏幕截图:
import -window root screenshot.png
因此输入图像可以指定为文件或 - 窗口根
答案 2 :(得分:1)