最簡單的螢幕複製程式(象素複製) (轉)
////////////////////////////////////////////////
//小弟工作之餘寫了一個,
//注意,該程式非常佔用時間,它的唯好處就是簡單,可以一個象素一個象素的操作
//您還可以根據需要改變象素的值達到特殊的效果。
//本程式在下測試透過,可以獲取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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- BMP圖片的複製#顯示到螢幕
- poi操作excel,複製sheet,複製行,複製單元格,複製styleExcel
- 淺複製和深複製的概念與值複製和指標複製(引用複製)有關 淺複製 “指標複製 深複製 值複製指標
- 簡單搭建MySQL主從複製MySql
- 不可複製的PDF轉成雙層可複製PDF
- Java引用複製、淺複製、深複製Java
- JS物件複製:深複製和淺複製JS物件
- 複製程式碼
- 複製和引用複製
- 簡單的多執行緒複製檔案執行緒
- go的深複製跟淺複製Go
- 淺複製與深複製
- MySQL 8 複製(三)——延遲複製與部分複製MySql
- 小程式複製功能
- JavaScript中的淺複製與深複製JavaScript
- 禁止複製的網頁怎麼複製網頁
- mysql複製--主從複製配置MySql
- python 淺複製、深複製坑Python
- python 深複製和淺複製Python
- JavaScript 淺複製和深複製JavaScript
- 複製
- WebRTC本地分享螢幕,錄製螢幕Web
- python深複製和淺複製的區別Python
- Mysql Master-slave複製簡單配置記錄MySqlAST
- 簡單實踐實現 MySQL 主從複製MySql
- js 實現深複製/深複製JS
- MySQL主從複製之GTID複製MySql
- MySQL 8 複製(一)——非同步複製MySql非同步
- MySQL 8 複製(二)——半同步複製MySql
- MySQL 8 複製(四)——GTID與複製MySql
- MySQL 8 複製(五)——配置GTID複製MySql
- go slice深複製和淺複製Go
- 對於複製普通物件 深複製和淺複製是否一樣物件
- Day 7.5 資料型別總結 + 複製 淺複製 深複製資料型別
- 列表的複製
- 螢幕錄製軟體是怎麼錄製電腦螢幕影片的?
- MySQL高可用之組複製技術(2):配置單主模型的組複製MySql模型
- C#中的物件深複製和淺複製C#物件
- 聊聊MySQL主從複製的幾種複製方式MySql