# include <windows.h>
# else
/* All MinGW needs ... */
-# include "MagickCore/nt-base-private.h"
+# include "magick/nt-base-private.h"
# include <wingdi.h>
# endif
#endif
#include "MagickCore/list.h"
#include "MagickCore/magick.h"
#include "MagickCore/memory_.h"
+#include "MagickCore/module.h"
#include "MagickCore/nt-feature.h"
+#include "MagickCore/option.h"
#include "MagickCore/pixel-accessor.h"
#include "MagickCore/quantum-private.h"
#include "MagickCore/static.h"
#include "MagickCore/string_.h"
-#include "MagickCore/module.h"
+#include "MagickCore/token.h"
+#include "MagickCore/utility.h"
+#include "MagickCore/xwindow.h"
+#include "MagickCore/xwindow-private.h"
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% o exception: return any errors or warnings in this structure.
%
*/
-
-#if defined(MAGICKCORE_WINGDI32_DELEGATE)
-static Image *ReadWindowsSCREENSHOTImage(const ImageInfo *image_info,
+static Image *ReadSCREENSHOTImage(const ImageInfo *image_info,
ExceptionInfo *exception)
{
- BITMAPINFO
- bmi;
-
- DISPLAY_DEVICE
- device;
-
- HBITMAP
- bitmap,
- bitmapOld;
-
- HDC
- bitmapDC,
- hDC;
-
Image
- *image,
- *screen;
-
- int
- i;
-
- register Quantum
- *q;
-
- register ssize_t
- x;
-
- RGBTRIPLE
- *p;
+ *image;
- ssize_t
- y;
-
- assert(image_info != (const ImageInfo *) NULL);
assert(image_info->signature == MagickSignature);
if (image_info->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
image_info->filename);
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
-
- i=0;
- device.cb = sizeof(device);
image=(Image *) NULL;
- while(EnumDisplayDevices(NULL,i,&device,0) && ++i)
+#if defined(MAGICKCORE_WINGDI32_DELEGATE)
{
- if ((device.StateFlags & DISPLAY_DEVICE_ACTIVE) != DISPLAY_DEVICE_ACTIVE)
- continue;
+ BITMAPINFO
+ bmi;
- hDC=CreateDC(device.DeviceName,device.DeviceName,NULL,NULL);
- if (hDC == (HDC) NULL)
- ThrowReaderException(CoderError,"UnableToCreateDC");
+ DISPLAY_DEVICE
+ device;
- screen=AcquireImage(image_info,exception);
- screen->columns=(size_t) GetDeviceCaps(hDC,HORZRES);
- screen->rows=(size_t) GetDeviceCaps(hDC,VERTRES);
- screen->storage_class=DirectClass;
+ HBITMAP
+ bitmap,
+ bitmapOld;
- if (image == (Image *) NULL)
- image=screen;
- else
- AppendImageToList(&image,screen);
+ HDC
+ bitmapDC,
+ hDC;
- bitmapDC=CreateCompatibleDC(hDC);
- if (bitmapDC == (HDC) NULL)
- {
- DeleteDC(hDC);
- ThrowReaderException(CoderError,"UnableToCreateDC");
- }
- (void) ResetMagickMemory(&bmi,0,sizeof(BITMAPINFO));
- bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
- bmi.bmiHeader.biWidth=(LONG) screen->columns;
- bmi.bmiHeader.biHeight=(-1)*(LONG) screen->rows;
- bmi.bmiHeader.biPlanes=1;
- bmi.bmiHeader.biBitCount=24;
- bmi.bmiHeader.biCompression=BI_RGB;
- bitmap=CreateDIBSection(hDC,&bmi,DIB_RGB_COLORS,(void **) &p,NULL,0);
- if (bitmap == (HBITMAP) NULL)
- {
- DeleteDC(hDC);
- DeleteDC(bitmapDC);
- ThrowReaderException(CoderError,"UnableToCreateBitmap");
- }
- bitmapOld=(HBITMAP) SelectObject(bitmapDC,bitmap);
- if (bitmapOld == (HBITMAP) NULL)
- {
- DeleteDC(hDC);
- DeleteDC(bitmapDC);
- DeleteObject(bitmap);
- ThrowReaderException(CoderError,"UnableToCreateBitmap");
- }
- BitBlt(bitmapDC,0,0,(int) screen->columns,(int) screen->rows,hDC,0,0,
- SRCCOPY);
- (void) SelectObject(bitmapDC,bitmapOld);
+ Image
+ *image,
+ *screen;
+
+ int
+ i;
- for (y=0; y < (ssize_t) screen->rows; y++)
+ register PixelPacket
+ *q;
+
+ register ssize_t
+ x;
+
+ RGBTRIPLE
+ *p;
+
+ ssize_t
+ y;
+
+ assert(image_info != (const ImageInfo *) NULL);
+ i=0;
+ device.cb = sizeof(device);
+ image=(Image *) NULL;
+ while(EnumDisplayDevices(NULL,i,&device,0) && ++i)
{
- q=QueueAuthenticPixels(screen,0,y,screen->columns,1,exception);
- if (q == (Quantum *) NULL)
- break;
- for (x=0; x < (ssize_t) screen->columns; x++)
+ if ((device.StateFlags & DISPLAY_DEVICE_ACTIVE) != DISPLAY_DEVICE_ACTIVE)
+ continue;
+
+ hDC=CreateDC(device.DeviceName,device.DeviceName,NULL,NULL);
+ if (hDC == (HDC) NULL)
+ ThrowReaderException(CoderError,"UnableToCreateDC");
+
+ screen=AcquireImage(image_info);
+ screen->columns=(size_t) GetDeviceCaps(hDC,HORZRES);
+ screen->rows=(size_t) GetDeviceCaps(hDC,VERTRES);
+ screen->storage_class=DirectClass;
+
+ if (image == (Image *) NULL)
+ image=screen;
+ else
+ AppendImageToList(&image,screen);
+
+ bitmapDC=CreateCompatibleDC(hDC);
+ if (bitmapDC == (HDC) NULL)
+ {
+ DeleteDC(hDC);
+ ThrowReaderException(CoderError,"UnableToCreateDC");
+ }
+ (void) ResetMagickMemory(&bmi,0,sizeof(BITMAPINFO));
+ bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+ bmi.bmiHeader.biWidth=(LONG) screen->columns;
+ bmi.bmiHeader.biHeight=(-1)*(LONG) screen->rows;
+ bmi.bmiHeader.biPlanes=1;
+ bmi.bmiHeader.biBitCount=24;
+ bmi.bmiHeader.biCompression=BI_RGB;
+ bitmap=CreateDIBSection(hDC,&bmi,DIB_RGB_COLORS,(void **) &p,NULL,0);
+ if (bitmap == (HBITMAP) NULL)
+ {
+ DeleteDC(hDC);
+ DeleteDC(bitmapDC);
+ ThrowReaderException(CoderError,"UnableToCreateBitmap");
+ }
+ bitmapOld=(HBITMAP) SelectObject(bitmapDC,bitmap);
+ if (bitmapOld == (HBITMAP) NULL)
+ {
+ DeleteDC(hDC);
+ DeleteDC(bitmapDC);
+ DeleteObject(bitmap);
+ ThrowReaderException(CoderError,"UnableToCreateBitmap");
+ }
+ BitBlt(bitmapDC,0,0,(int) screen->columns,(int) screen->rows,hDC,0,0,
+ SRCCOPY);
+ (void) SelectObject(bitmapDC,bitmapOld);
+
+ for (y=0; y < (ssize_t) screen->rows; y++)
{
- SetPixelRed(image,ScaleCharToQuantum(p->rgbtRed),q);
- SetPixelGreen(image,ScaleCharToQuantum(p->rgbtGreen),q);
- SetPixelBlue(image,ScaleCharToQuantum(p->rgbtBlue),q);
- SetPixelAlpha(image,OpaqueAlpha,q);
- p++;
- q++;
+ q=QueueAuthenticPixels(screen,0,y,screen->columns,1,exception);
+ if (q == (PixelPacket *) NULL)
+ break;
+ for (x=0; x < (ssize_t) screen->columns; x++)
+ {
+ SetPixelRed(q,ScaleCharToQuantum(p->rgbtRed));
+ SetPixelGreen(q,ScaleCharToQuantum(p->rgbtGreen));
+ SetPixelBlue(q,ScaleCharToQuantum(p->rgbtBlue));
+ SetPixelOpacity(q,OpaqueOpacity);
+ p++;
+ q++;
+ }
+ if (SyncAuthenticPixels(screen,exception) == MagickFalse)
+ break;
}
- if (SyncAuthenticPixels(screen,exception) == MagickFalse)
- break;
- }
- DeleteDC(hDC);
- DeleteDC(bitmapDC);
- DeleteObject(bitmap);
+ DeleteDC(hDC);
+ DeleteDC(bitmapDC);
+ DeleteObject(bitmap);
+ }
}
- return(image);
-}
-#endif
+#elif defined(MAGICKCORE_X11_DELEGATE)
+ {
+ const char
+ *option;
-static Image *ReadSCREENSHOTImage(const ImageInfo *image_info,ExceptionInfo *exception)
-{
-#if defined(MAGICKCORE_WINGDI32_DELEGATE)
- return ReadWindowsSCREENSHOTImage(image_info,exception);
-#else
- magick_unreferenced(image_info);
- magick_unreferenced(exception);
- return((Image *) NULL);
+ XImportInfo
+ ximage_info;
+
+ XGetImportInfo(&ximage_info);
+ option=GetImageOption(image_info,"x:screen");
+ if (option != (const char *) NULL)
+ ximage_info.screen=IsStringTrue(option);
+ option=GetImageOption(image_info,"x:silent");
+ if (option != (const char *) NULL)
+ ximage_info.silent=IsStringTrue(option);
+ image=XImportImage(image_info,&ximage_info,exception);
+ }
#endif
+ return(image);
}
\f
/*
ModuleExport void UnregisterSCREENSHOTImage(void)
{
(void) UnregisterMagickInfo("SCREENSHOT");
-}
\ No newline at end of file
+}