クリップボードから画像取得
前回質問させていただいたのですが
質問を打ち切ってしまい そのあと試したのですが
うまくいきません。
Window画面に表示はしたくないのです。
クリップボードの画像をファイルに保存したいのですが
以下のソースでどこがおかしいでしょうか
case IDM_SAVE:
hdc = BeginPaint(hWnd, &ps);
if (IsClipboardFormatAvailable(CF_BITMAP))
{
OpenClipboard(hWnd);
hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
hdc_mem = CreateCompatibleDC(hdc);
SelectObject(hdc_mem, hBitmap);
GetObject(hBitmap,(int)sizeof(bmp_info),&bmp_info);
width=bmp_info.bmWidth;
height=bmp_info.bmHeight;
MessageBox(NULL,"Debug 0","Debug0",MB_OK);
fopen_s(&fpt,"ClipBoard.bmp","wb");
BITMAPINFOHEADER bmih;
BITMAPFILEHEADER bmfh;
//RGBQUAD rgbquad;
DWORD filesize,bmfhsize,bmihsize;
bmfhsize=sizeof(bmfh);
bmihsize=sizeof(bmih);
//rgbquadsize=sizeof(rgbquad);
filesize=bmfhsize+bmihsize+width*height;
::ZeroMemory(&bmfh, bmfhsize);
::ZeroMemory(&bmih, bmihsize);
bmfh.bfType=0x4d42;
bmfh.bfSize=filesize;
bmfh.bfReserved1=0;
bmfh.bfReserved2=0;
bmfh.bfOffBits=bmfhsize+bmihsize;
bmih.biSize=bmihsize;
bmih.biWidth=width;
bmih.biHeight=height;
bmih.biPlanes=1;
bmih.biBitCount=32;
bmih.biClrUsed=2;
bmih.biCompression=BI_RGB;//無圧縮形式
bmih.biSizeImage=0;//BI_RGBをセットした場合、0が好ましいとMSDNに書いてあった。
bmih.biXPelsPerMeter=0;
bmih.biYPelsPerMeter=0;
bmih.biClrImportant=0;
MessageBox(NULL,"Debug 1","Debug1",MB_OK);
fwrite(&bmfh,sizeof(unsigned char),bmfhsize,fpt);
fwrite(&bmih,sizeof(unsigned char),bmihsize,fpt);
MessageBox(NULL,"Debug 2","Debug2",MB_OK);
fwrite(&bmp_info.bmBits,1,3*width*height,fpt);
MessageBox(NULL,"Debug 3","Debug3",MB_OK);
fclose(fpt);
DeleteDC(hdc_mem);
CloseClipboard();
}
EndPaint(hWnd, &ps);
break;
}
break;
画像の先頭アドレスがどこにおさめられているのかが
わかりません
fwrite(&bmp_info.bmBits,1,3*width*height,fpt);
がおかしい様なのですがよくわかりません。
よろしくおねがいします。
お礼
回答ありがとうございます。 どうもネットワークフォルダを見に行くときに時間がかかる場合があるようで、 ネット回線のないPCだと一度も問題は起きませんでした。 ただ曖昧なのが、ネットワークにつなげているPCで、ノートンのセキュリティを無効にすると問題が解消されたのですが、しばらくするとまた再発します。 そして、また別にノートンをインストールしているPCでは何事も起きなかったりと、謎が多いです。個体差があるのかもしれませんね。 具体的な原因は分かりませんでしたが、一旦解決とさせていただきます。