4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
1
2
3
|
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
4
5
6
|
#include <stdio.h>
#include <stdlib.h>
|
a0ae785b
Jean Wasilewski
Non working version
|
7
8
|
#define AWESOME 7
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
9
10
11
12
13
14
|
Display *dis;
int screen;
Window win;
GC gc;
int width=320;
int height=240;
|
a0ae785b
Jean Wasilewski
Non working version
|
15
|
int i=0;
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
16
|
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
17
18
19
20
|
void init_x();
void close_x();
void redraw();
|
a0ae785b
Jean Wasilewski
Non working version
|
21
22
|
int main ()
{
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
23
24
25
|
XEvent event; /* the XEvent declaration !!! */
KeySym key; /* a dealie-bob to handle KeyPress Events */
char text[255]; /* a char buffer for KeyPress Events */
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
26
|
XColor col;
|
a0ae785b
Jean Wasilewski
Non working version
|
27
|
int initOffsetBMP;
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
28
29
30
31
32
33
|
init_x();
printf("Patte de canard\n");
Colormap cmap = DefaultColormap(dis, DefaultScreen(dis));
printf("?\n");
|
155f7ac1
Jean Wasilewski
Some BMP recognition
|
34
35
36
37
38
39
40
41
42
43
44
45
46
|
FILE* home = NULL;
char buffer[4];
home = fopen("home.bmp", "r");
if(home == NULL)
return 0;
fseek(home, 0x0A, SEEK_SET);
buffer[0] = getc(home);
buffer[1] = getc(home);
buffer[2] = getc(home);
buffer[3] = getc(home);
printf("Pixel array offset %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
|
a0ae785b
Jean Wasilewski
Non working version
|
47
|
initOffsetBMP = buffer[0] + (buffer[1] >> 8) + (buffer[2] >> 16) + (buffer[3] >> 24);
|
155f7ac1
Jean Wasilewski
Some BMP recognition
|
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
fseek(home, 0x12, SEEK_SET);
buffer[0] = getc(home);
buffer[1] = getc(home);
buffer[2] = getc(home);
buffer[3] = getc(home);
printf("Width %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
//fseek(home, 0x12, SEEK_SET);
buffer[0] = getc(home);
buffer[1] = getc(home);
buffer[2] = getc(home);
buffer[3] = getc(home);
printf("Height %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
fseek(home, 0x1C, SEEK_SET);
buffer[0] = getc(home);
buffer[1] = getc(home);
printf("Bits Per Pixel %02x %02x\n", buffer[0], buffer[1]);
if(buffer[1] != 0 || buffer[0] != 0x18)
{
printf("Could not read BMP\n");
return 1;
}
|
a0ae785b
Jean Wasilewski
Non working version
|
75
|
fseek(home, initOffsetBMP, SEEK_SET);
|
155f7ac1
Jean Wasilewski
Some BMP recognition
|
76
|
|
a0ae785b
Jean Wasilewski
Non working version
|
77
78
|
while(1)
{
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
79
80
|
XNextEvent(dis, &event);
|
a0ae785b
Jean Wasilewski
Non working version
|
81
|
if (event.type==Expose && event.xexpose.count==0)
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
82
|
redraw();
|
a0ae785b
Jean Wasilewski
Non working version
|
83
84
85
86
|
if (event.type==KeyPress&& XLookupString(&event.xkey,text,255,&key,0)==1)
{
if (text[0]=='q')
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
87
|
close_x();
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
88
89
|
printf("You pressed the %c key!\n",text[0]);
}
|
a0ae785b
Jean Wasilewski
Non working version
|
90
91
92
93
|
if (event.type==ButtonPress)
{
//int x=event.xbutton.x,
//y=event.xbutton.y;
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
94
95
96
97
98
|
//strcpy(text,"X is FUN!");
//XSetForeground(dis,gc,rand()%event.xbutton.x%255);
//XDrawString(dis,win,gc,x,y, text, strlen(text));
|
a0ae785b
Jean Wasilewski
Non working version
|
99
100
101
102
103
104
105
106
107
108
109
|
buffer[0] = getc(home);
buffer[1] = getc(home);
buffer[2] = getc(home);
int j;
for(j=0; j<AWESOME; j++)
{
col.red = buffer[2];
col.green = buffer[1];
col.blue = buffer[0];
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
110
|
|
a0ae785b
Jean Wasilewski
Non working version
|
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
if(XAllocColor(dis, cmap, &col) == 0)
printf("Failed to allocate color\n");
if(XSetForeground(dis, gc, col.pixel) == 0)
printf("Failed to set foreground\n");
if(XDrawPoint(dis,win,gc,i%width,i/height) == 0)
printf("Failed to draw point\n");
buffer[0] = getc(home);
buffer[1] = getc(home);
buffer[2] = getc(home);
printf("X %03d Y %03d R %02x G %02x B %02x\n", i%width, i/height, buffer[0], buffer[1], buffer[2]);
i++;
}
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
127
128
|
}
}
|
a0ae785b
Jean Wasilewski
Non working version
|
129
130
|
printf("End of display\n");
return 0;
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
131
132
133
|
}
void init_x() {
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
134
135
136
137
138
139
|
unsigned long black,white;
dis=XOpenDisplay((char *)0);
screen=DefaultScreen(dis);
black=BlackPixel(dis,screen),
white=WhitePixel(dis, screen);
|
a0ae785b
Jean Wasilewski
Non working version
|
140
|
win=XCreateSimpleWindow(dis,DefaultRootWindow(dis),0,0,width,height, 0,black, white);
|
4daa2ca3
Jean Wasilewski
Displaying a pixe...
|
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
XSetStandardProperties(dis,win,"Howdy","Hi",None,NULL,0,NULL);
XSelectInput(dis, win, ExposureMask|ButtonPressMask|KeyPressMask);
gc=XCreateGC(dis, win, 0,0);
XSetBackground(dis,gc,white);
XSetForeground(dis,gc,black);
XClearWindow(dis, win);
XMapRaised(dis, win);
};
void close_x() {
XFreeGC(dis, gc);
XDestroyWindow(dis,win);
XCloseDisplay(dis);
exit(1);
};
void redraw() {
XClearWindow(dis, win);
};
|