QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1996|回复: 15

关于图像文件格式

[复制链接]
发表于 2005-12-27 09:05:41 | 显示全部楼层 |阅读模式
我用 cp /dev/fb0 mscreen 将屏幕图像截至文件 mscreen 但打引出来却是类似这样的数据格式
..........
0
-18
-18
-18
0
-16
-16
-16
0
-14
-14
-14
0
-12
-12
-12
0
-10
-10
-10
0
-9
-9
-9
0
-95
-95
-95
0
我用cp mscreen /dev/fb0 图像在屏幕一闪而过 根本看不到
有什么持续显示这屏幕图像的方法 是不是要进行格式转换
发表于 2005-12-27 09:30:06 | 显示全部楼层
一个像素占4个字节,前3个字节分别是蓝绿红,第四个字节不知道干什么用的,反正都是0。
回复

使用道具 举报

 楼主| 发表于 2005-12-27 13:54:19 | 显示全部楼层
#include <X11/Xlib.h>
#include <X11/xpm.h>
#include <X11/Xutil.h>

main()
{
    Window desktop;
    Display *dsp;
    XImage *img;
    int w,h;

    dsp=XOpenDisplay(NULL);
    if(!dsp)
    {
        printf("XOpenDisplay error\n");
        return;
    }
    desktop=RootWindow(dsp,0);
    if(!desktop)
    {
        printf("cannot get root window\n");
        return;
    }
    w=DisplayWidth(dsp,0);
    h=DisplayHeight(dsp,0);
    img=XGetImage(dsp,desktop,0,0,w,h,~0,ZPixmap);
    XpmWriteFileFromImage(dsp,"./screenshot.xpm",img,NULL,NULL);
    XDestroyImage(img);
    XCloseDisplay(dsp);
}


编译的时候要加什么后缀吗 如-l....
gcc -o screen -I/usr/include screen.c[/quote]
回复

使用道具 举报

发表于 2005-12-27 14:44:13 | 显示全部楼层
-L/usr/X11R6/lib -lX11 -lXpm
回复

使用道具 举报

 楼主| 发表于 2005-12-27 15:43:51 | 显示全部楼层
好了 谢谢 但xpm实在太大了
回复

使用道具 举报

 楼主| 发表于 2005-12-27 15:53:58 | 显示全部楼层
有没有办法将其转换成png或其他格式
回复

使用道具 举报

发表于 2005-12-27 15:56:38 | 显示全部楼层
用jpeglib直接压缩成jpeg文件
回复

使用道具 举报

 楼主| 发表于 2005-12-27 16:01:04 | 显示全部楼层
能不能找到函数 XpmWriteFileFromImage 的源代码
回复

使用道具 举报

发表于 2005-12-27 16:18:34 | 显示全部楼层
xorg源码里有
回复

使用道具 举报

 楼主| 发表于 2005-12-28 16:18:10 | 显示全部楼层
我创建了两个窗口 win1和win2 win2是win1的子窗口 但却无法用XStoreName 显示子窗口win2的名子 和win1相比 需要添加什么特定的语句吗
回复

使用道具 举报

发表于 2005-12-29 09:14:39 | 显示全部楼层
子窗口你是怎么建的?
回复

使用道具 举报

 楼主| 发表于 2005-12-29 10:38:29 | 显示全部楼层
win1=CreateWindow(rootWindow,posx,posy,width,height,border);
win2=CreateWindow(win1,posx,posy,width,height,border);
回复

使用道具 举报

 楼主| 发表于 2005-12-29 10:38:56 | 显示全部楼层
Window CreateWindow(parent,posx,posy,width,height,border)
{
Window win;
win=XCreateSimpleWindow(display,parent,posx,posy,width,height,border,blackPixel,whitePixel);
XMapWindow(display,win);
return(win);
}
回复

使用道具 举报

 楼主| 发表于 2005-12-29 10:46:17 | 显示全部楼层
还有 这段程序在2.6.14.3下就无效了  过去我用的是2.4.20-8
回复

使用道具 举报

 楼主| 发表于 2005-12-29 10:48:01 | 显示全部楼层
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
Display *display;
int screen;
unsigned long whitePixel,blackPixel;
Window rootWindow;
void Initialise(){
display=XOpenDisplay(NULL);
screen=DefaultScreen(display);
rootWindow=DefaultRootWindow(display);
whitePixel=WhitePixel(display,screen);
blackPixel=BlackPixel(display,screen);
}
Window CreateWindow(parent,posx,posy,width,height,border)
int posx,posy;
{
Window win;
win=XCreateSimpleWindow(display,parent,posx,posy,width,height,border,blackPixel,whitePixel);
XMapWindow(display,win);
return(win);
}
main(argc,argv)
int argc;
char **argv;
{
Window win1,win2;
unsigned int width,height,border;
int posx,posy;
Colormap screen_colormap;           ///
GC gc;
XColor red, brown, blue, yellow, green;
Initialise();
screen_colormap = DefaultColormap(display, DefaultScreen(display));
border=4;
width=height=400;
posx=posy=100;
win1=CreateWindow(rootWindow,posx,posy,width,height,border);

border=4;
width=height=200;
posx=posy=50;
win2=CreateWindow(win1,posx,posy,width,height,border);
gc=DefaultGC(display,screen);
XAllocNamedColor(display, screen_colormap, "blue", &blue, &blue);     ///
XStoreName(display,win1,"eee");//
XStoreName(display,win2,"fff");//
XSetForeground(display, gc, blue.pixel);
XDrawLine(display,win1,gc,0,0,400,400);
XDrawString(display, win1, gc, 100, 100,"hahaha",10);
XDrawLine(display,win2,gc,0,199,199,0);


XSync(display,False);
sleep(10);
XDestroyWindow(display,win2);
XDestroyWindow(display,win1);
XCloseDisplay(display);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 00:25 , Processed in 0.047298 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表