最簡單的螢幕複製程式(象素複製) (轉)
////////////////////////////////////////////////
//小弟工作之餘寫了一個,
//注意,該程式非常佔用時間,它的唯好處就是簡單,可以一個象素一個象素的操作
//您還可以根據需要改變象素的值達到特殊的效果。
//本程式在下測試透過,可以獲取256色以上個種解析度的螢幕
//自定義RGB象素Structure
typedef struct tagRBBREQUIRED
{
BYTE rgbBlue;
BYTE rgbGREEN;
BYTE rgbRed;
} RGBREQUIRED, *PRGBREQUIRED;
int ENTRY WinMain ( HINSTANCE hInstance,
HINSTance hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HDC hdcScr;
int cx, cy;
BITMAPFILEHEADER BFH;
BITMAPINFOHEADER BIH;
wType;
LONG lSize;
LONG lPixNum;
BYTE byte;
PRGBREQUIRED pPixel = NULL;
fstream *out;
cx = GetSystemMetrics ( SM_CXSCREEN );
cy = GetSystemMetrics ( SM_CYSCREEN );
lSize = sizeof ( RGBREQUIRED ) * cy * cx;
lPixNum = cy * cx ;
byte = 'M';
wType = (byte << 8);
byte = 'B';
wType = wType + byte;
//填寫點陣圖資訊頭
BIH.biSize = sizeof (BIH);
BIH.biHeight = cy;
BIH.biWidth = cx;
BIH.biClrImportant = 0;
BIH.biClrUsed = 0;
BIH.biCompresion = BI_RGB;
BIH.biPlaned = 1;
BIH.biSizeImage = lSize + 44;
BIH.biXPelsPerMeter = 3780;
BIH.biYPelsPerMeter = 3780;
BIH.biBitCount = 24;
//填寫點陣圖頭
BFH.bfType = wType;
BFH.bfSize = lSize;
BFH.bfOffBits = sizeof ( BFH ) + sizeof ( BIH );
BFH.bfReserved1 = 0;
BFH.bfReserved2 = 0;
hdcScr = GetDC ( NULL );
if ( !hdcScr )
{
MessageBox ( NULL, "Can't get the screen handle", "Error", MB_OK );
return 0;
}
pPixel = new RGBREQUIRED[lPixNum];
if ( !pPixel )
{
MessageBox ( NULL, "Can't alloc memory", "Error", MB_OK);
return 0;
}
memset ( ( void * ) pPixel, 0, lSize );
PRGBREQUIRED pTemp = pPixel;
RGBREQUIRED TmpPix;
DWORD colorRef;
int i, j;
for ( i=cy-1; i>=0; i-- )
for ( j=0 ; j
colorRef = GetPixel ( hdcScr, j, i ); //獲取象素的色彩值00BBGGRR
TmpPix.rgbBlue = (BYTE) ( ( colorRef & 0x00ff0000 ) >> 16 );
TmpPix.rgbGreen = (BYTE) ( ( colorRef & 0x0000ff00 ) >> 16 );
TmpPix.rgbRed = (BYTE) ( colorRef & 0x000000ff );
*pTemp = TmpPix;
}
//儲存檔案
out = new fstream ( "screen.bmp", ios::out|ios::binary, filebuf::sh_none );
if ( !out )
{
delete pPixel;
pPixel = NULL;
pTemp = NULL;
MessageBox ( NULL, "Can't open file", "Error", MB_OK );
return 0;
}
out->write ( ( char* )&BFH, sizeof ( BITMAPFILEHEADER ) ); //寫入位件頭
out->write ( ( char* )&BIH, sizeof ( BITMAPINFOHEADER ) ); //寫入點陣圖資訊頭
out->write ( ( char* )&pPixel, lSize );
out->close();
delete pPixel;
pPixel = NULL;
pTemp = NULL;
MessageBox ( NULL, "Copy screen succesully!", "Congratulations", MB_OK);
return 0;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-958854/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- poi操作excel,複製sheet,複製行,複製單元格,複製styleExcel
- 簡單配置mysql的主從複製MySql
- postgresql 9.4 流複製簡單配置SQL
- 簡單搭建MySQL主從複製MySql
- Java引用複製、淺複製、深複製Java
- GoldenGate單向複製配置(支援DDL複製)Go
- 用最簡單的方法複製或遷移Oracle資料庫Oracle資料庫
- JS物件複製:深複製和淺複製JS物件
- GoldenGate簡單複製環境的搭建Go
- mongoDB的主從複製簡單測試MongoDB
- JavaScript複製dom元素簡單介紹JavaScript
- 主從複製、雙主複製及半同步複製、以及基於SSL的複製
- 複製程式碼
- 用VB製作螢幕保護程式 (轉)
- MySQL 8 複製(三)——延遲複製與部分複製MySql
- 簡單的多執行緒複製檔案執行緒
- GoldenGate複製的幾個簡單測試Go
- MySQL的主從複製、半同步複製、主主複製詳解MySql
- MySQL主從複製、半同步複製和主主複製MySql
- 禁止複製的網頁怎麼複製網頁
- JavaScript中的淺複製與深複製JavaScript
- JavaScript 淺複製和深複製JavaScript
- mysql複製--主從複製配置MySql
- 簡單的單資料來源複製例項——流
- 小程式複製功能
- MySQL主從複製、半同步複製和主主複製概述MySql
- Oracle備份與恢復系列(四)複製資料庫 續 手工複製資料庫的最簡操作Oracle資料庫
- 跨網路複製檔案的簡單實踐
- WebRTC本地分享螢幕,錄製螢幕Web
- MySQL的非同步複製和半同步複製MySql非同步
- MySQL 8 複製(一)——非同步複製MySql非同步
- MySQL 8 複製(二)——半同步複製MySql
- go slice深複製和淺複製Go
- MySQL主從複製_複製過濾MySql
- c#淺複製與深複製C#
- js 實現深複製/深複製JS
- 配置mysql5.5主從複製、半同步複製、主主複製MySql
- 對於複製普通物件 深複製和淺複製是否一樣物件