使用“x:”特殊文件格式
如果您想进行无风格的屏幕截图,可以通过在MagickReadImage
中传递"x:root"作为源参数来调用ImageMagick的导入命令。 x:格式可通过传递pid
或窗口标签来进行完整屏幕截图或单个窗口捕获。其他修饰符可以捕获区域和分页。
#include <wand/MagickWand.h>
int main(int argc, char **argv)
{
MagickWandGenesis();
MagickWand *wand = NULL;
wand = NewMagickWand();
MagickReadImage(wand,"x:root");
MagickWriteImage(wand,"screen_shot.png");
if(wand)wand = DestroyMagickWand(wand);
MagickWandTerminus();
return 0;
}
使用额外的 'magick' 库
除了 wand
库之外,magick/xwindow.h
还允许您通过使用 XImportImage
、XImportInfo
和 XGetImportInfo
方法导入图像。您可以在 ImageMagick 的源文件 wand/import.c 中查看这些方法的工作方式。
直接使用 X 和像素迭代器
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];
Display *display = XOpenDisplay(NULL);
Window root = DefaultRootWindow(display);
XWindowAttributes attr;
XGetWindowAttributes(display, root, &attr);
MagickWand *wand = NULL;
PixelWand *pwand = NULL;
PixelIterator *pitr = NULL;
PixelWand **wand_pixels = NULL;
MagickWandGenesis();
pwand = NewPixelWand();
PixelSetColor(pwand,"white");
wand = NewMagickWand();
MagickNewImage(wand,attr.width,attr.height,pwand);
pitr = NewPixelIterator(wand);
XImage *image = XGetImage(display,root, 0,0 ,
attr.width, attr.height,
XAllPlanes(), ZPixmap);
unsigned long nwands;
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,
(pixel&0x00ff00)>>8,
pixel&0x0000ff
);
PixelSetColor(wand_pixels[x],hex);
}
(void) PixelSyncIterator(pitr);
}
MagickWriteImages(wand,"screen_test.png");
XDestroyImage(image);
pitr=DestroyPixelIterator(pitr);
wand=DestroyMagickWand(wand);
MagickWandTerminus();
XCloseDisplay(display);
return 0;
}
实用提示
确保ImageMagick可以连接到您的显示系统。尝试一些import
命令行来验证您的本地安装是否正常工作。这个问题是一个很好的例子。
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