#include"BMP_out.h"

 

BOOL CopyDIB(HWND hWnd)

{

       LPBMPINFO lpBmpInfo;

       int iWidth,iHeight;

       LPDWORD lpPixel;

 

       HGLOBAL hMem;

       LPBYTE lpMem;

       LPBITMAPINFOHEADER lpInfo;

       LPBYTE lpPixelClip;

      

       int x,y;

 

       lpBmpInfo=(LPBMPINFO)GetWindowLong(hWnd,GWL_USERDATA);

       if(lpBmpInfo==NULL || lpBmpInfo->lpPixel==NULL){

              MessageBox(hWnd,"画像がありません","エラー",MB_OK);

              return FALSE;

       }

       iWidth=lpBmpInfo->biInfo.bmiHeader.biWidth;

       iHeight=lpBmpInfo->biInfo.bmiHeader.biHeight;

       lpPixel=lpBmpInfo->lpPixel;

 

       hMem=GlobalAlloc(GHND,sizeof(BITMAPINFOHEADER)+iWidth*iHeight*3);

 

       lpMem=(LPBYTE)GlobalLock(hMem);

 

       lpInfo=(LPBITMAPINFOHEADER)lpMem;

       lpPixelClip=lpMem+sizeof(BITMAPINFOHEADER);

 

       lpInfo->biSize=sizeof(BITMAPINFOHEADER);

       lpInfo->biWidth=iWidth;

       lpInfo->biHeight=iHeight;

       lpInfo->biPlanes=1;

       lpInfo->biBitCount=24;

       lpInfo->biCompression=BI_RGB;

 

       for (y=0;y<iHeight;y++)

              for (x=0;x<iWidth;x++)

                     CopyMemory(lpPixelClip+x*3+y*iWidth*3,lpPixel+x+y*iWidth,3);

 

       GlobalUnlock(hMem);

 

       OpenClipboard(hWnd);

       EmptyClipboard();

 

       SetClipboardData(CF_DIB,hMem);

 

       CloseClipboard();

 

       return TRUE;

}