/**
* gdi 截圖函式
* 引數 hwnd 要截圖的視窗控制代碼
* 引數 dirpath 截圖存放目錄
* 引數 filename 截圖名稱
*/int captureimage(hwnd hwnd, const char *dirpath, const char *filename)
// 通過視窗dc 建立乙個相容位圖
hbmscreen = createcompatiblebitmap(hdcscreen, width, height);
if (!hbmscreen)
// 將位圖塊傳送到我們相容的記憶體dc中
selectobject(hdcmemdc, hbmscreen);
if (!bitblt(
hdcmemdc, // 目的dc
0, 0, // 目的dc的 x,y 座標
width, height, // 目的 dc 的寬高
hdcscreen, // **dc
0, 0, // **dc的 x,y 座標
srccopy)) // 貼上方式
// 獲取位圖資訊並存放在 bmpscreen 中
getobject(hbmscreen, sizeof(bitmap), &bmpscreen);
bi.bisize = sizeof(bitmapinfoheader);
bi.biwidth = bmpscreen.bmwidth;
bi.biheight = bmpscreen.bmheight;
bi.biplanes = 1;
bi.bibitcount = 32;
bi.bicompression = bi_rgb;
bi.bisizeimage = 0;
bi.bixpelspermeter = 0;
bi.biypelspermeter = 0;
bi.biclrused = 0;
bi.biclrimportant = 0;
dwbmpsize = ((bmpscreen.bmwidth * bi.bibitcount + 31) / 32) * 4 * bmpscreen.bmheight;
// 在 32-bit windows 系統上, globalalloc 和 localalloc 是由 heapalloc 封裝來的
// handle 指向程序預設的堆. 所以開銷比 heapalloc 要大
hdib = globalalloc(ghnd, dwbmpsize);
lpbitmap = (char *)globallock(hdib);
// 獲取相容點陣圖的位並且拷貝結果到乙個 lpbitmap 中.
getdibits(
hdcscreen, // 裝置環境控制代碼
hbmscreen, // 位圖控制代碼
0, // 指定檢索的第乙個掃瞄線
(uint)bmpscreen.bmheight, // 指定檢索的掃瞄線數
lpbitmap, // 指向用來檢索位圖資料的緩衝區的指標
(bitmapinfo *)&bi, // 該結構體儲存點陣圖的資料格式
dib_rgb_colors // 顏色表由紅、綠、藍(rgb)三個直接值構成
// 建立乙個檔案來儲存檔案截圖
hfile = createfile(
filepath,
generic_write,
0,null,
create_always,
file_attribute_normal,
null
);// 將 頭(headers)的大小, 加上點陣圖的大小來獲得整個檔案的大小
dwsizeofdib = dwbmpsize + sizeof(bitmapfileheader) + sizeof(bitmapinfoheader);
// 設定 offset 偏移至位圖的位(bitmap bits)實際開始的地方
bmfheader.bfoffbits = (dword)sizeof(bitmapfileheader) + (dword)sizeof(bitmapinfoheader);
// 檔案大小
bmfheader.bfsize = dwsizeofdib;
// 點陣圖的 bftype 必須是字串 "bm"
bmfheader.bftype = 0x4d42; //bm
dwbyteswritten = 0;
writefile(hfile, (lpstr)&bmfheader, sizeof(bitmapfileheader), &dwbyteswritten, null);
writefile(hfile, (lpstr)&bi, sizeof(bitmapinfoheader), &dwbyteswritten, null);
writefile(hfile, (lpstr)lpbitmap, dwbmpsize, &dwbyteswritten, null);
// 解鎖堆記憶體並釋放
globalunlock(hdib);
globalfree(hdib);
// 關閉檔案控制代碼
closehandle(hfile);
// 清理資源
deleteobject(hbmscreen);
deleteobject(hdcmemdc);
releasedc(null, hdcscreen);
return 0;
}
Android 實現截圖
android實現截圖功能,使用view的方法,得到以時間戳命名的png view view v.getrootview view.setdrawingcacheenabled true view.builddrawingcache bitmap bitmap1 view.getdrawingcac...
截圖效果實現
markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細語法參考幫助?本編輯器支援markdown extra,擴充套件了很多好用的功能。具體請參考...
Qt實現桌面截圖
實現桌面截圖,軟體如下 圖1 桌面截圖 主要介紹乙個方法 grabwindow wid window,int x 0,int y 0,int width 1,int height 1 建立並返回乙個qpixmap,通過抓取給定視窗的內容 x y width height 引數 x y 指定視窗中的偏...