共享保存图片信息,加密,。。。。。。
HDC hdcSrc = ::GetDC(hWnd);
int nBitPerPixel = GetDeviceCaps(hdcSrc, BITSPIXEL);//);
RECT rc;
// this->GetClientRect(&rc);
::GetClientRect(hWnd,&rc);
int nWidth = rc.right - rc.left;//GetDeviceCaps(hdcSrc, HORZRES);//abs((lpRect->right) - (lpRect->left));//
int nHeight = rc.bottom - rc.top;//GetDeviceCaps(hdcSrc, VERTRES);//abs((lpRect->bottom)-(lpRect->top ));
int startx = 0;
int starty = 0;
sprintf( debug_buf, "nWidth = %d : nHeight = %d ",nWidth,nHeight);
TestLogOutput( debug_buf );
CImage image;
image.Create(nWidth, nHeight, 32);//nBitPerPixel);
BitBlt(image.GetDC(),0, 0, nWidth, nHeight, hdcSrc, startx, starty,SRCCOPY);// SRCCOPY);//PATCOPY);
//image.Load(L"D:\\Work2\\Ex\\MainWnd\\Release\\temp\\SignImage.png");
char *buff ;
char *en_data;
IStream *pStream = 0;
HRESULT hr;
LARGE_INTEGER seekPos = {0};
int stride = 4 * ((image.GetWidth() + 3) / 4);
size_t safeSize = stride * image.GetHeight() * 4 + sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER) + 256 * sizeof(RGBQUAD);
HGLOBAL hMem = GlobalAlloc(GHND, safeSize);
hr = CreateStreamOnHGlobal(hMem, TRUE, &pStream);
hr = image.Save(pStream,Gdiplus::ImageFormatPNG);
ULARGE_INTEGER imageSize;
hr = pStream->Seek(seekPos,STREAM_SEEK_CUR,&imageSize);
char* buffer = new char[imageSize.LowPart];
hr = pStream->Seek(seekPos, STREAM_SEEK_SET, 0);
hr = pStream->Read(buffer, imageSize.LowPart, 0);
en_data = (char *)malloc(safeSize);
memset(en_data,0,safeSize);
sprintf( debug_buf, "buffer : data[0] = %x ,en_data = %s ",buffer,en_data); //kk[0],kk[1],kk[2],kk[3],n );
TestLogOutput( debug_buf );
base64_encode(buffer,imageSize.LowPart,en_data);
sprintf( debug_buf, "after encode : en_data = %s ",en_data);
TestLogOutput( debug_buf );
buff = en_data;
int bstrlen=(int)MultiByteToWideChar(
CP_ACP, // コードページ ANSI コードページ
0, // 文字の種類を指定するフラグ
buff, // マップ元文字列のアドレス
strlen(buff), // マップ元文字列のバイト数
NULL, // マップ先ワイド文字列を入れるバッファのアドレス
0 // バッファのサイズ
);
BSTR bstr=SysAllocStringLen(NULL,bstrlen);
//BSTRに複製
MultiByteToWideChar(
CP_ACP,
0,
buff,
strlen(buff),
bstr,
bstrlen
);
*data = bstr;
#if 0
char* buf = new char[imageSize.LowPart];
memset(buf,0,imageSize.LowPart);
int n;
base64_decode(en_data,buf,&n);
// Save to disk
FILE* fp = 0;
errno_t err = _wfopen_s(&fp, L"D:\\Work2\\Ex\\MainWnd\\Release\\temp\\3.png", L"wb");
assert(err == 0 && fp != 0);
fwrite(buf, 1, imageSize.LowPart, fp);
fclose(fp);
#endif
// Cleanup
pStream->Release();
delete[] buffer;
ReleaseDC(hdcSrc);
image.ReleaseDC();