13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 64e82e51d7ebce7b4ef0f808d906124dd6f812248cristy% CCCC L IIIII PPPP BBBB OOO AAA RRRR DDDD % 74e82e51d7ebce7b4ef0f808d906124dd6f812248cristy% C L I P P B B O O A A R R D D % 84e82e51d7ebce7b4ef0f808d906124dd6f812248cristy% C L I PPP BBBB O O AAAAA RRRR D D % 94e82e51d7ebce7b4ef0f808d906124dd6f812248cristy% C L I P B B O O A A R R D D % 104e82e51d7ebce7b4ef0f808d906124dd6f812248cristy% CCCC LLLLL IIIII P BBBB OOO A A R R DDDD % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Read/Write Windows Clipboard. % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Leonard Rosenthol % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% May 2002 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 207ce65e7125a4e1df1a274ce373c537a9df9c16cdCristy% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_WINGDI32_DELEGATE) 443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# if defined(__CYGWIN__) 453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# include <windows.h> 463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# else 473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* All MinGW needs ... */ 48b5ae05b44058a9b8976cd09a43145a23b219748dcristy# include "MagickCore/nt-base-private.h" 493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# include <wingdi.h> 503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy# endif 513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h" 544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/cache.h" 554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image.h" 584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h" 594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h" 604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h" 614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 62f7836bf507b2e32ad7343056f8af34f3ce65d08acristy#include "MagickCore/nt-feature.h" 63d3a48928f150c1b6963167220a5f7ff9681a5036cristy#include "MagickCore/pixel-accessor.h" 644c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 654c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/static.h" 664c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 674c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/module.h" 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Forward declarations. 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_WINGDI32_DELEGATE) 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType 741e178e70fb3c956f9fc1e30c3ba863e882666465cristy WriteCLIPBOARDImage(const ImageInfo *,Image *,ExceptionInfo *); 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e a d C L I P B O A R D I m a g e % 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ReadCLIPBOARDImage() reads an image from the system clipboard and returns 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% it. It allocates the memory necessary for the new Image structure and 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returns a pointer to the new image. 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ReadCLIPBOARDImage method is: 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Image *ReadCLIPBOARDImage(const ImageInfo *image_info, 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo exception) 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_WINGDI32_DELEGATE) 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Image *ReadCLIPBOARDImage(const ImageInfo *image_info, 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ExceptionInfo *exception) 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *image; 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1113ec328f01daf9179c098eeca6026899fd53121d3dirk MagickBooleanType 1123ec328f01daf9179c098eeca6026899fd53121d3dirk status; 1133ec328f01daf9179c098eeca6026899fd53121d3dirk 114bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy register ssize_t 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy x; 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1174c08aed51c5899665ade97263692328eea4af106cristy register Quantum 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *q; 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1204e82e51d7ebce7b4ef0f808d906124dd6f812248cristy ssize_t 1214e82e51d7ebce7b4ef0f808d906124dd6f812248cristy y; 1224e82e51d7ebce7b4ef0f808d906124dd6f812248cristy 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info != (const ImageInfo *) NULL); 124e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_info->signature == MagickCoreSignature); 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->debug != MagickFalse) 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->filename); 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 129e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(exception->signature == MagickCoreSignature); 1309950d57e1124b73f684fb5946e206994cefda628cristy image=AcquireImage(image_info,exception); 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HBITMAP 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bitmapH; 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HPALETTE 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hPal; 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy OpenClipboard(NULL); 1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bitmapH=(HBITMAP) GetClipboardData(CF_BITMAP); 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hPal=(HPALETTE) GetClipboardData(CF_PALETTE); 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CloseClipboard(); 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ( bitmapH == NULL ) 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowReaderException(CoderError,"NoBitmapOnClipboard"); 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy BITMAPINFO 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DIBinfo; 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy BITMAP 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bitmap; 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HBITMAP 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hBitmap, 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hOldBitmap; 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HDC 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hDC, 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hMemDC; 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RGBQUAD 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *pBits, 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *ppBits; 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* create an offscreen DC for the source */ 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hMemDC=CreateCompatibleDC(NULL); 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hOldBitmap=(HBITMAP) SelectObject(hMemDC,bitmapH); 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy GetObject(bitmapH,sizeof(BITMAP),(LPSTR) &bitmap); 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if ((image->columns == 0) || (image->rows == 0)) 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image->columns=bitmap.bmWidth; 170acabb847a592ca5e430c1c0949d03acfc0b78bb9cristy image->rows=bitmap.bmHeight; 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 172acabb847a592ca5e430c1c0949d03acfc0b78bb9cristy status=SetImageExtent(image,image->columns,image->rows,exception); 173acabb847a592ca5e430c1c0949d03acfc0b78bb9cristy if (status == MagickFalse) 174acabb847a592ca5e430c1c0949d03acfc0b78bb9cristy return(DestroyImageList(image)); 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Initialize the bitmap header info. 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) ResetMagickMemory(&DIBinfo,0,sizeof(BITMAPINFO)); 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DIBinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER); 180eaedf06777741da32408da72c1e512975c600c48cristy DIBinfo.bmiHeader.biWidth=(LONG) image->columns; 181eaedf06777741da32408da72c1e512975c600c48cristy DIBinfo.bmiHeader.biHeight=(-1)*(LONG) image->rows; 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DIBinfo.bmiHeader.biPlanes=1; 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DIBinfo.bmiHeader.biBitCount=32; 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DIBinfo.bmiHeader.biCompression=BI_RGB; 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hDC=GetDC(NULL); 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (hDC == 0) 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowReaderException(CoderError,"UnableToCreateADC"); 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hBitmap=CreateDIBSection(hDC,&DIBinfo,DIB_RGB_COLORS,(void **) &ppBits, 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy NULL,0); 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ReleaseDC(NULL,hDC); 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (hBitmap == 0) 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowReaderException(CoderError,"UnableToCreateBitmap"); 1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* create an offscreen DC */ 1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hDC=CreateCompatibleDC(NULL); 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (hDC == 0) 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DeleteObject(hBitmap); 1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowReaderException(CoderError,"UnableToCreateADC"); 1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy hOldBitmap=(HBITMAP) SelectObject(hDC,hBitmap); 2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (hOldBitmap == 0) 2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DeleteDC(hDC); 2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DeleteObject(hBitmap); 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy ThrowReaderException(CoderError,"UnableToCreateBitmap"); 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (hPal != NULL) 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* Kenichi Masuko says this needed */ 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SelectPalette(hDC, hPal, FALSE); 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy RealizePalette(hDC); 2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* bitblt from the memory to the DIB-based one */ 214eaedf06777741da32408da72c1e512975c600c48cristy BitBlt(hDC,0,0,(int) image->columns,(int) image->rows,hMemDC,0,0,SRCCOPY); 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* finally copy the pixels! */ 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pBits=ppBits; 217bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (y=0; y < (ssize_t) image->rows; y++) 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); 220acd2ed254c18c254a0ab5aafa06d1645e5d079d8cristy if (q == (Quantum *) NULL) 2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 222bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy for (x=0; x < (ssize_t) image->columns; x++) 2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 2244c08aed51c5899665ade97263692328eea4af106cristy SetPixelRed(image,ScaleCharToQuantum(pBits->rgbRed),q); 2254c08aed51c5899665ade97263692328eea4af106cristy SetPixelGreen(image,ScaleCharToQuantum(pBits->rgbGreen),q); 2264c08aed51c5899665ade97263692328eea4af106cristy SetPixelBlue(image,ScaleCharToQuantum(pBits->rgbBlue),q); 2274c08aed51c5899665ade97263692328eea4af106cristy SetPixelAlpha(image,OpaqueAlpha,q); 2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy pBits++; 229ed2315769b26818ed9d0c1291dc0457f0d8da0a4cristy q+=GetPixelChannels(image); 2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (SyncAuthenticPixels(image,exception) == MagickFalse) 2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy break; 2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DeleteDC(hDC); 2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy DeleteObject(hBitmap); 2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) CloseBlob(image); 2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(GetFirstImageInList(image)); 2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif /* MAGICKCORE_WINGDI32_DELEGATE */ 2423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e g i s t e r C L I P B O A R D I m a g e % 2493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% RegisterCLIPBOARDImage() adds attributes for the clipboard "image format" to 2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the list of supported formats. The attributes include the image format 2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% tag, a method to read and/or write the format, whether the format 2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% supports the saving of more than one frame to the same file or blob, 2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% whether the format supports native in-memory I/O, and a brief 2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% description of the format. 2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the RegisterCLIPBOARDImage method is: 2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 263bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t RegisterCLIPBOARDImage(void) 2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 266bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyModuleExport size_t RegisterCLIPBOARDImage(void) 2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickInfo 2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *entry; 2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 27106b627a07ff44e1ff93ef1288c9f428066ded10ddirk entry=AcquireMagickInfo("CLIPBOARD","CLIPBOARD","The system clipboard"); 2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_WINGDI32_DELEGATE) 2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->decoder=(DecodeImageHandler *) ReadCLIPBOARDImage; 2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->encoder=(EncodeImageHandler *) WriteCLIPBOARDImage; 2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif 27608e9a113db499034abb5ad8d59b42f8eca3c641cdirk entry->flags^=CoderAdjoinFlag; 277009d739511cb808de2f5899fe7e06be7350838e9cristy entry->format_type=ImplicitFormatType; 2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RegisterMagickInfo(entry); 2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickImageCoderSignature); 2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% U n r e g i s t e r C L I P B O A R D I m a g e % 2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% UnregisterCLIPBOARDImage() removes format registrations made by the 2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% RGB module from the list of supported formats. 2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the UnregisterCLIPBOARDImage method is: 2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% UnregisterCLIPBOARDImage(void) 2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristyModuleExport void UnregisterCLIPBOARDImage(void) 3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnregisterMagickInfo("CLIPBOARD"); 3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% W r i t e C L I P B O A R D I m a g e % 3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WriteCLIPBOARDImage() writes an image to the system clipboard. 3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the WriteCLIPBOARDImage method is: 3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType WriteCLIPBOARDImage(const ImageInfo *image_info, 3221e178e70fb3c956f9fc1e30c3ba863e882666465cristy% Image *image,ExceptionInfo *exception) 3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: The image. 3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 3301e178e70fb3c956f9fc1e30c3ba863e882666465cristy% o exception: return any errors or warnings in this structure. 3311e178e70fb3c956f9fc1e30c3ba863e882666465cristy% 3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#if defined(MAGICKCORE_WINGDI32_DELEGATE) 3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType WriteCLIPBOARDImage(const ImageInfo *image_info, 3351e178e70fb3c956f9fc1e30c3ba863e882666465cristy Image *image,ExceptionInfo *exception) 3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy /* 3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Allocate memory for pixels. 3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy */ 3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info != (const ImageInfo *) NULL); 341e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image_info->signature == MagickCoreSignature); 3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 343e1c94d9d25db6b0dd7a5028ffee31d1057855d73cristy assert(image->signature == MagickCoreSignature); 3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy { 3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy HBITMAP 3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy bitmapH; 3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 3504e82e51d7ebce7b4ef0f808d906124dd6f812248cristy OpenClipboard(NULL); 3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy EmptyClipboard(); 352a7540de2cbe9210c2fa77b49cfb68071a826f501cristy bitmapH=(HBITMAP) ImageToHBITMAP(image,exception); 3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy SetClipboardData(CF_BITMAP,bitmapH); 3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy CloseClipboard(); 3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy } 3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickTrue); 3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy#endif /* MAGICKCORE_WINGDI32_DELEGATE */ 359