將屏幕保存爲圖片,使用vs2008編譯通過。
#include "stdafx.h" #include <windows.h> #include <atlimage.h> int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { HWND hwnd = ::GetDesktopWindow(); HDC hDC = ::GetDC(hwnd);//獲取屏幕DC RECT rect; ::GetClientRect(hwnd, &rect);//獲取屏幕大小 HDC hDCMem = ::CreateCompatibleDC(hDC);//創建兼容DC HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right, rect.bottom);//創建兼容位圖 HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//將位圖選入DC,並保存返回值 ::BitBlt(hDCMem, 0, 0, rect.right, rect.bottom, hDC, 0, 0, SRCCOPY);//將屏幕DC的圖象複製到內存DC中 CImage image; image.Attach(hBitMap); image.Save(_T("c://B.jpg"));//如果文件後綴爲.bmp,則保存爲爲bmp格式 image.Detach(); ::SelectObject(hDCMem, hOldMap);//選入上次的返回值 //釋放 ::DeleteObject(hBitMap); ::DeleteDC(hDCMem); ::DeleteDC(hDC); return 0; }
將當前MFC程序(這裏是單文檔程序)保存爲圖片,使用vs2005。第一個使用CImage類保存圖片,第二個使用BITMAPINFO。
第一個:
void CMainFrame::OnGetMap() { HWND hwnd = this->GetSafeHwnd(); HDC hDC = ::GetWindowDC(hwnd);//獲取DC RECT rect; ::GetWindowRect(hwnd, &rect);//獲取屏幕大小 HDC hDCMem = ::CreateCompatibleDC(hDC);//創建兼容DC HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right-rect.left, rect.bottom-rect.top);//創建兼容位圖 HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//將位圖選入DC,並保存返回值 ::BitBlt(hDCMem, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hDC, 0, 0, SRCCOPY);//將屏幕DC的圖象複製到內存DC中 CImage image;//需要#include <atlimage.h> image.Attach(hBitMap); image.Save(_T("c://B.jpg"));//如果文件後綴爲.bmp,則保存爲爲bmp格式 image.Detach(); ::SelectObject(hDCMem, hOldMap);//選入上次的返回值 //釋放 ::DeleteObject(hBitMap); ::DeleteDC(hDCMem); ::DeleteDC(hDC); }
第二個:
void CMainFrame::OnGetMap() { CDC* pDC = GetWindowDC(); CBitmap bitmap; CDC memDC ; CRect rect; GetWindowRect(rect); memDC.CreateCompatibleDC(pDC); bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()); memDC.SelectObject(&bitmap); memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,0,0,SRCCOPY); CFileDialog fDlg(FALSE,_T("bmp"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("位圖文件|*.bmp"),this); if (fDlg.DoModal()==IDOK) { CString bmpfile = fDlg.GetPathName(); CFile file(bmpfile,CFile::modeCreate|CFile::modeWrite); BITMAP bInfo; bitmap.GetBitmap(&bInfo); //計算調色板大小 int panelsize = 0; if (bInfo.bmBitsPixel<24) //非真彩色 { panelsize = pow((double)2,bInfo.bmBitsPixel)*sizeof(RGBQUAD); } //定義位圖信息 BITMAPINFO* bMapInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize); bMapInfo->bmiHeader.biBitCount = bInfo.bmBitsPixel; bMapInfo->bmiHeader.biClrImportant = 0; bMapInfo->bmiHeader.biCompression = 0; bMapInfo->bmiHeader.biHeight = bInfo.bmHeight; bMapInfo->bmiHeader.biPlanes = bInfo.bmPlanes; bMapInfo->bmiHeader.biSize = sizeof(BITMAPINFO); bMapInfo->bmiHeader.biSizeImage = bInfo.bmHeight*bInfo.bmWidthBytes; bMapInfo->bmiHeader.biWidth = bInfo.bmWidth; bMapInfo->bmiHeader.biXPelsPerMeter = 0; bMapInfo->bmiHeader.biYPelsPerMeter = 0; //獲取位圖的實際數據 char* pData = new char[bMapInfo->bmiHeader.biSizeImage]; int len = GetDIBits(pDC->m_hDC,bitmap,0,bInfo.bmHeight,pData,bMapInfo,DIB_RGB_COLORS); BITMAPFILEHEADER bFileHeader; bFileHeader.bfType = 0x4D42; bFileHeader.bfReserved1 = 0; bFileHeader.bfReserved2 = 0; bFileHeader.bfSize = sizeof(BITMAPFILEHEADER); bFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+panelsize; //向文件中寫入位圖數據 file.Write(&bFileHeader,sizeof(BITMAPFILEHEADER)); file.Write(&bMapInfo->bmiHeader,sizeof(BITMAPINFOHEADER)); file.Write(pData,bMapInfo->bmiHeader.biSizeImage+panelsize); file.Close(); delete pData; LocalFree(bMapInfo); } bitmap.DeleteObject(); memDC.DeleteDC(); }
Qt 是目前最先進、最完整的跨平臺C++開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用於超過70個行業、數千家企業,支持數百萬設備及應用。 快捷編輯器示例展示瞭如何創建一
1. 前言 在實際防火牆中,可能存在着海量的安全策略,傳統的逐個規則進行檢查不再能滿足防火牆在高性能方面的需求。因此,需要提出一種快速匹配算法來提升安全策略的匹配性能,這種快速匹配算法需要解決如下問題: 功能正確:功能與逐個規則匹配結果
本文分享自華爲雲社區《GaussDB SQL基礎語法示例-BOOLEAN表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持的SQL標準(默認支持SQL2、SQL3和SQL
O2OA(翱途)開發平臺[下稱O2OA開發平臺或者O2OA]的消息機制允許開發者通過配置實現郵件通知。本篇主要闡述如何實現待辦消息的郵件通知。 一、先決條件: 1、O2Server服務器正常運行,系統安裝部署請參考
Flowable 有3種監聽器,相關內容在開發文檔中有詳細的說明: 事件監聽器(Flowable 開發文檔 3.18) 執行監聽器(Flowable 開發文檔 8.5.13) 任務監聽器(Flowable 開發文檔 8.5.14) 分別
本文分享自華爲雲社區《GaussDB(DWS)向量化執行引擎詳解》,作者: yd_212508532。 前言 適用版本:【基線功能】 傳統的行執行引擎大多采用一次一元組的執行模式,這樣在執行過程中CPU大部分時間並沒有用來處理數據,更
剛剛進行了微信sessionkey的學習,正準備實戰一下,就發現了這個神奇的網站,預知後事如何。請繼續向下看去 1. 目標 2. 開局一個登錄框 3. 首先,直接弱口令走起來,萬一留有測試的賬號呢 嘗試,1311111111,1333
infoq的博客發佈界面也是非常簡潔的。首頁就只有基本的標題,內容和封面圖片,所以infoq的實現也相對比較簡單。 一起來看看吧。 前提條件 前提條件當然是先下載 blog-auto-publishing-tools這個博客自動發佈工具,地
阿里雲有個開發者社區,入駐過的朋友可能想要把自己的博客發佈到阿里雲社區上。 今天我來介紹一下blog-auto-publishing-tools自動發佈博客到阿里雲的實現原理。 阿里雲的博客發佈界面比較簡單,只有標題,正文,摘要,關聯試用產
各位熱愛 DolphinScheduler 的小夥伴們,4 月份的 DolphinScheduler 社區月報更新啦!這裏將記錄 DolphinScheduler 社區每月的重要更新,歡迎關注! 月度 Merge 之星 感謝以下小夥伴 4
segmentfault是我在這些平臺中看過界面最爲簡潔的博客平臺了。 今天就以segmentfault爲例,講講在blog-auto-publishing-tools中的實現原理。 前提條件 前提條件當然是先下載 blog-auto-pu
TiDB Serverless 上的向量化功能終於開始邀約體驗啦!本文是來自 TiDB 社區用戶對 TiDB Vector 功能初體驗的詳細分享,hey-hoho 介紹了他從申請體驗到實際操作的全過程,包括創建 TiDB Vector 實例
開源項目推薦 k8s-image-swapper k8s-image-swapper 是 Kubernetes 的一個變更 Webhook,它將鏡像下載到自己的鏡像倉庫,並將鏡像指向該新位置。它是 docker pull-through p
輕鬆復現一張AI圖片 現在有一個非常漂亮的AI圖片,你是不是想知道他是怎麼生成的? 今天我會交給大家三種方法,學會了,什麼圖都可以手到擒來了。 需要的軟件 在本教程中,我們將使用AUTOMATIC1111 stable diffusio
@[toc] Spring Security 是一個功能強大且可高度定製的安全框架,它提供了一套完整的解決方案,用於保護基於 Spring 的應用程序。在 Spring Security 中,路徑匹配是權限控制的核心部分,它決定了哪些請求可