C語言實現截圖

2022-06-01 18:48:12 字數 2830 閱讀 2566

/**

* 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 指定視窗中的偏...