Code:CImage tmpImage = pDoc->m_imageArray[0]; int w = tmpImage.GetWidth(); int h = tmpImage.GetHeight(); int Bpp = tmpImage.GetBPP(); BITMAPINFOHEADER bmInfohdr; bmInfohdr.biSize = sizeof(BITMAPINFOHEADER); bmInfohdr.biWidth = w; bmInfohdr.biHeight = -h; bmInfohdr.biPlanes = 1; bmInfohdr.biBitCount = Bpp; bmInfohdr.biCompression = BI_RGB; bmInfohdr.biSizeImage = w*h*Bpp; bmInfohdr.biXPelsPerMeter = 0; bmInfohdr.biYPelsPerMeter = 0; bmInfohdr.biClrUsed = 0; bmInfohdr.biClrImportant = 0; BITMAPINFO bmInfo; bmInfo.bmiHeader = bmInfohdr; bmInfo.bmiColors[0].rgbBlue=255; void* pBits = tmpImage.GetBits(); HANDLE hData = ::GlobalAlloc (GMEM_MOVEABLE, sizeof(BITMAPINFO) + w * h * 3); LPVOID pData = (LPVOID) ::GlobalLock (hData); LPBYTE p_imagebits; p_imagebits = (LPBYTE)pData + sizeof(BITMAPINFO); memcpy(pData,&bmInfo,sizeof(BITMAPINFO)); DWORD dwBytes = ((DWORD) w * Bpp) / 32; if(((DWORD) w * Bpp) % 32) { dwBytes++; } dwBytes *= 4; unsigned long m_dwSizeImage = dwBytes * h; // no compression memcpy (p_imagebits, pBits, m_dwSizeImage); ::GlobalUnlock (hData); COleDataSource* pods = new COleDataSource; pods->CacheGlobalData (CF_DIB, hData); pods->SetClipboard ();
I'm trying to copy the DIB from the CImage into the clipboard. I get an access read violation on the second memcpy. Can anyone explain what I've done wrong?.