gpt4 book ai didi

c++ - FLTK桌面截图问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:52 26 4
gpt4 key购买 nike

我想在 Windows 和 Linux 上截取我的桌面。

我在 windows(ok) 和 linux 上试过这段代码。唯一的问题是,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();
}

也许你可以帮我解决这个问题。

最佳答案

通过添加“win->border(0)”找到解决方案,我将编辑第一篇文章。

关于c++ - FLTK桌面截图问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46596654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com