當前位置:編程學習大全網 - 編程語言 - 求Linux下C語言編程實現桌面攔截。

求Linux下C語言編程實現桌面攔截。

使用xlib。?

#包含?& ltstdio.h & gt

#包含?& ltstdlib.h & gt

#包含?& ltstring.h & gt

#包含?& ltx 11/xlib . h & gt;

#包含?& ltjpeglib.h & gt

/***************************************************************

寫?希馬格?數據?去哪?答?JPEG?文件

必須?包括?& ltjpeglib.h & gt

回歸?價值:

0?-?不成功的

1?-?成功

****************************************************************/

靜電?夏爾?err _ str[256];

int?jpegwritefilefroimage(char?*文件名,?XImage*?img)

{

文件*?FP;

struct?jpeg_compress_struct?cinfo

struct?jpeg_error_mgr?jerr

fp?=?fopen(文件名,“WB”);

if(fp==NULL)

{

memset(err_str,?0,?sizeof(err _ str));

sprintf(err_str,"不能?寫?文件?%s”,文件名);

err _ exit(" jpegwritefilefroimage ",err _ str);

回歸?0;

}

cinfo.err?=?jpeg_std_error。jerr);

jpeg_create_compresscinfo);

JPEG _ stdio _ dest(& amp;cinfo,FP);

cinfo.image_width?=?img-& gt;寬度;

cinfo.image_height?=?img-& gt;身高;

cinfo.input_components?=?3;

cinfo.in_color_space?=?JCS _ RGB

JPEG _ set _ defaults(& amp;cinfo);

jpeg_start_compress。cinfo,真);

JSAMPROW?row _ pointer[1];/*?指針?去哪?掃描線?*/

未簽名?char*?pBuf?=?(未簽名?char *)malloc(3 * img-& gt;寬度);

row_pointer[0]?=?pBuf

int?I = 0;

while(cinfo.next_scanline?& lt?cinfo.image_height)

{

int?j = 0;

for(I = 0;我& ltimg-& gt;寬度;i++)

{

//memcpy(pBuf+j,img-& gt;data+cinfo . next _ scanline * img-& gt;bytes_per_line+i*4,3);

*(pBuf+j)?=?*(img->;data+cinfo . next _ scanline * img-& gt;bytes _ per _ line+I * 4+2);

*(pBuf+j+1)?=?*(img->;data+cinfo . next _ scanline * img-& gt;bytes _ per _ line+I * 4+1);

*(pBuf+j+2)?=?*(img->;data+cinfo . next _ scanline * img-& gt;bytes _ per _ line+I * 4);

j+= 3;

}

JPEG _ write _ scanlines(& amp;cinfo,row_pointer,1);

}

免費(pBuf);

jpeg_finish_compress。cinfo);

JPEG _ destroy _ compress(& amp;cinfo);

fclose(FP);

回歸?1;

}

/*****************************************************************

俘獲?答?本地的?截圖?的?那個?桌面,

儲蓄?去哪?那個?文件?指定的?被誰?文件名。

如果?類型?=?0,?然後呢?寫?答?位圖?文件,?其他

寫?答?JPEG?文件。

回歸?價值:

0?-?失敗

1?-?成功

******************************************************************/

int?CaptureDesktop(char*?文件名,?int?類型)

{

窗戶?桌面;

顯示*?dsp

XImage*?img

int?屏幕_寬度;

int?屏幕_高度;

dsp?=?XOpenDisplay(空);/*?連接?去哪?答?本地的?展示?*/

if(NULL==dsp)

{

//sprintf(err_str,"錯誤:不能?連接?去哪?本地的?display \ n ");

err_exit("CaptureDesktop ","不能?連接?去哪?本地的?顯示”);

回歸?0;

}

桌面?=?RootWindow(dsp,0);/*?參考?去哪?那個?根?窗戶?*/

if(0 = =桌面)

{

//printf("不能?得到?根?window \ n ");

err_exit("CaptureDesktop ","不能?得到?根?窗口”);

回歸?0;

}

/*?檢索?那個?寬度?然後呢。那個?身高?的?那個?屏幕?*/

屏幕_寬度?=?顯示寬度(dsp,0);

屏幕_高度?=?DisplayHeight(dsp,0);

/*?得到?那個?形象?的?那個?根?窗戶?*/

img?=?XGetImage(dsp,desktop,0,0,screen_width,screen_height,~0,ZPixmap);

如果(類型==0)

BmpWriteFileFromImage(文件名,img);

其他

JpegWriteFileFromImage(文件名,img);

XDestroyImage(img);

xclosedidisplay(DSP);

回歸?1;

}

主()

{

CaptureDesktop("。/screenshot.bmp ",0);

//CaptureDesktop("。/screenshot.jpg ",1);

printf("完成。\ n ");

}

  • 上一篇:智慧教育平臺有哪些
  • 下一篇:龍灣集團國家森林公園冬季旅遊龍灣森林公園在哪裏
  • copyright 2024編程學習大全網