void Drawfisheye(HWND hwnd, POINT& point)
{
HDC hdc;
HDC hmdc;
HWND hwndDesk;
RECT rc;
BITMAP bm;
HBITMAP hbmp;
HBITMAP hbmpPrev;
int BMP_W, BMP_H;
rc.bottom = MyPoint.OldPoint.y-100;
rc.left = MyPoint.OldPoint.x+100;
rc.right= MyPoint.OldPoint.y-100;
rc.top = MyPoint.OldPoint.y;100;
hwndDesk = GetDesktopWindow();
//GetWindowRect(hwndDesk, &rc);
hdc = CreateCompatibleDC(NULL);
hbmp = CreateBackbuffer(rc.right, rc.bottom);
hbmpPrev = (HBITMAP)SelectObject(hdc, hbmp);
BitBlt(hdc, 0, 0, rc.right, rc.bottom, GetWindowDC(hwndDesk), rc.left,
rc.top, SRCCOPY);
GetObject(hbmp, sizeof(BITMAP), &bm);
if (WriteBitmap(TEXT(capture.bmp), rc.right, rc.bottom, bm.bmBits))
ShowText(ok);
else
ShowText(nope);
//hbmp = (HBITMAP)LoadImage( NULL, capture.bmp, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE );
hdc = GetDC(hwnd);
BMP_W = (int)bm.bmWidth;
BMP_H = (int)bm.bmHeight;
GetObject(hbmp, sizeof(BITMAP), &bm);
hmdc = CreateCompatibleDC(hdc);
SelectObject(hmdc, hbmp);
TransparentBlt(hdc, MyPoint.OldPoint.x, MyPoint.OldPoint.y, BMP_W*2,
BMP_H*2, hmdc, 0, 0, BMP_W, BMP_H, (UINT)RGB(0, 0, 255)) ;
DeleteDC(hmdc);
DeleteObject(hbmp);
ReleaseDC(hwnd, hdc);
}
デスクトップのが画像をとりこんで
ポインタでさした
まわりを切り取って
それを拡大し
表示させることによって
ポインタでさしたところをズームさせるようなプログラムをつくりたいのですが
画像が反映されません
よろしくおねがいします
以下の3つの関数が何者か分かりません。
CreateBackbuffer()
WriteBitmap()
ShowText()
あと、一度にたくさん質問しすぎです。
一つずつ質問しましょう。
というわけで、まずはデスクトップ画面取り込みから、
http://www.dinop.com/vc/capture.html
CreateBackbuffer()は
HBITMAP CreateBackbuffer(int nWidth, int nHeight)
{
LPVOID lp;
BITMAPINFO bmi;
BITMAPINFOHEADER bmiHeader;
ZeroMemory(&bmiHeader, sizeof(BITMAPINFOHEADER));
bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmiHeader.biWidth = nWidth;
bmiHeader.biHeight = nHeight;
bmiHeader.biPlanes = 1;
bmiHeader.biBitCount = 24;
bmi.bmiHeader = bmiHeader;
return CreateDIBSection(NULL, (LPBITMAPINFO)&bmi, DIB_RGB_COLORS, &lp,
NULL, 0);
というものでDIBセクションを割り当てをおこなうものです
WriteBitmap()はファイルを作成してビットマップに必要なデータを書き込む関数です。
ShowText()は画面に文字を表示する関数です
WriteBitmap()が成功するとOKと表示されます
現在デスクトップを読み込み
デスクトップの画像を
bitmapファイルで保存するというところまではできています
問題は線を引いているときに
ペンがディスプレイにあたっている部分の周りを
切りとり拡大して再描画したいのですが
毎回切り取ったファイルを作成して
それをLoadImageで読み込んで表示すると
処理が重たくなるので
ファイルを作成しないでbitmapを表示したいと思っています
前半の内容の後処理をしないまま
後半に入っているので、HDCとHBITMAPの関係がめちゃくちゃ
一つのビットマップは複数のDCには結び付けられない
CreateBackbuffer()の出所はこれかな?
http://eternalwindows.jp/graphics/bitmap/bitmap10.html
ただ、やりたい内容からして、DIBにする必要はなく、
DDBで十分な気がします。
また、いったんファイルに保存する必要性もないと思います。
直接、
hwndDeskのデバイスコンテキストから、
hwndのデバイスコンテキストにTransparentBlt()
すれば良いだけだと思います。
丁寧に回答してくださってありがとうございます
とてもわかりやすかったです