2017-10-06 11 views
0

Windows 및 Linux에서 내 바탕 화면의 스크린 샷을 찍고 싶었습니다.FLTK Desktop Screenshot Issue

나는이 코드를 Windows (ok)와 linux에서 시도했다. 유일한 문제는 리눅스의 어두운 회색 배경 (Fl_Box의 스크린 샷 텍스트가 올바르게 표시됨)이다.

#include <FL/Fl.H> 
#include <FL/Fl_Window.H> 
#include <FL/Fl_Box.H> 
#include <FL/fl_draw.H> 
#include <png.h> 

int save_png(const char *file,unsigned char* p,int w,int h){ 
    FILE *fp; 
    fp = fl_fopen(file, "wb"); 
    if (fp == NULL)return 1; 
    png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, 
             0, 0, 0); 
    if (png == NULL){ 
     fclose (fp); 
     return 2; 
    } 
    png_infop info = png_create_info_struct(png); 
    png_bytep ptr = (png_bytep)p; 
    png_init_io(png, fp); 
    png_set_IHDR(png, info, w, h, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, 
     PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); 
    png_write_info(png, info); 
    for (int i = h; i>0; i--, ptr += w * 3) { 
     png_write_row(png,ptr); 
    } 
    png_write_end(png,info); 
    png_destroy_write_struct(&png, &info); 
    fclose(fp); 
    return 0; 
} 

class WIN : public Fl_Window { 
    public: 
    WIN(int w, int h, const char*l = 0):Fl_Window(w,h,l){} 

    void draw(){ 
     Fl_Window::draw(); 
     uchar *p = fl_read_image(0,0,0,w(),h()); 
     if(p){ 
     save_png("test.png",p,w(),h()); 
     delete[]p; 
     } 
     hide(); 
    } 
}; 

int main(){ 
    WIN *win = new WIN(Fl::w(),Fl::h()); 
    win->box(FL_NO_BOX); 
    Fl_Box b(0,0,win->w(),win->h(),"screenshot"); 
    b.box(FL_NO_BOX); 
    b.labelcolor(FL_RED); 
    win->fullscreen(); 
    win->border(0); //added 
    win->show(); 
    return Fl::run(); 
} 

은 아마 당신이 좀 도와 수 아래

는 코드입니다.

답변

0

"win-> border (0)"을 추가하여 해결책을 찾았 으면 첫 번째 게시물을 편집합니다.

+0

자신 만의 질문에 답변 할 수 있습니다. 이 질문에 대답으로 표시하십시오. – cup

+0

감사합니다. – nimday