將屏幕保存爲圖片,使用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. 前言 在實際防火牆中,可能存在着海量的安全策略,傳統的逐個規則進行檢查不再能滿足防火牆在高性能方面的需求。因此,需要提出一種快速匹配算法來提升安全策略的匹配性能,這種快速匹配算法需要解決如下問題: 功能正確:功能與逐個規則匹配結果
鏈表或數組作爲底層數據結構 雙向鏈表的頭節點和尾節點視爲雙向隊列的隊首和隊尾,同時實現在兩端添加和刪除節點的功能 使用環形數組來實現雙向隊列 雙向隊列應用 雙向隊列兼具棧與隊列的邏輯,因此它可以實現這兩者的所有應用場景,同時提供更高的自由
Qt 是目前最先進、最完整的跨平臺C++開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用於超過70個行業、數千家企業,支持數百萬設備及應用。 Line Edits(行編輯)
本文分享自華爲雲社區《GaussDB(DWS)向量化執行引擎詳解》,作者: yd_212508532。 前言 適用版本:【基線功能】 傳統的行執行引擎大多采用一次一元組的執行模式,這樣在執行過程中CPU大部分時間並沒有用來處理數據,更
剛剛進行了微信sessionkey的學習,正準備實戰一下,就發現了這個神奇的網站,預知後事如何。請繼續向下看去 1. 目標 2. 開局一個登錄框 3. 首先,直接弱口令走起來,萬一留有測試的賬號呢 嘗試,1311111111,1333
隨着當前數據處理業務場景日趨複雜,對於大數據處理平臺基礎架構的能力要求也越來越高,既要求數據湖的大存儲能力,也要求具備海量數據高效批處理能力,同時還可能對延時敏感的近實時鏈路有強需求,本文主要介紹基於 MaxCompute 的離線近實時一體
在 Vue3 中,可以使用 reactive 函數創建響應式對象。這些響應式對象可以跟蹤其屬性的變化並且自動地更新視圖。但是在某些情況下,我們可能需要清空這些響應式對象。下面是一些方法來清空 Vue3 reactive。 方法一:使用 Ob
本文分享自華爲雲社區《應用中大量數據的分頁處理》,作者:碼樂。 簡介 大批量數據的展示一直被視爲一個必須要解決的問題。 一個經典的思想就是分批展示和處理它們。 1 查詢時外鍵的處理 如果在django model 中模型使用了外鍵,通過
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 中,路徑匹配是權限控制的核心部分,它決定了哪些請求可
本文分享自華爲雲社區《如何基於香橙派AIpro將開源框架模型轉換爲昇騰模型》,作者:昇騰CANN。 在前面的介紹中,我們知道了如何基於香橙派AIpro開發AI推理應用,也大致瞭解到在推理之前,需要把原始網絡模型 (可能是 PyTorch 的
前言 面試常問的一些中間件,學習總結一下。以下環境分別使用vulhub和vulfocus復現。 Apache apache 文件上傳 (CVE-2017-15715) 描述: Apache(音譯爲阿帕奇)是世界使用排名第一的Web服務器