Rev 5598 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5520 | leency | 1 | #define MEMSIZE 0xFFFFF |
2 | #include "..\lib\kolibri.h" |
||
3 | #include "..\lib\strings.h" |
||
4 | #include "..\lib\mem.h" |
||
5 | #include "..\lib\gui.h" |
||
6 | |||
7 | #ifndef AUTOBUILD |
||
8 | #include "lang.h--" |
||
9 | #endif |
||
10 | |||
11 | /* === DATA === */ |
||
12 | |||
13 | system_colors sc; |
||
14 | proc_info Form; |
||
15 | |||
16 | |||
17 | dword b_screen, |
||
18 | s_screen; |
||
19 | |||
20 | int b_screen_width, |
||
21 | b_screen_height, |
||
22 | b_screen_length, |
||
23 | s_screen_width, |
||
24 | s_screen_height, |
||
25 | s_screen_length; |
||
26 | |||
27 | |||
28 | /* === CODE === */ |
||
29 | |||
30 | |||
31 | void main() |
||
32 | { |
||
33 | char id; |
||
34 | mem_Init(); |
||
35 | b_screen_width = GetScreenWidth()+1; |
||
36 | b_screen_height = GetScreenHeight()+1; |
||
37 | b_screen_length = b_screen_width*b_screen_height*3; |
||
38 | s_screen_width = b_screen_width / 2; |
||
39 | s_screen_height = b_screen_height / 2; |
||
40 | s_screen_length = b_screen_length / 2; |
||
41 | |||
42 | b_screen = malloc(b_screen_length); |
||
43 | s_screen = malloc(b_screen_length/2); |
||
44 | |||
45 | loop() |
||
46 | { |
||
47 | switch(WaitEvent()) |
||
48 | { |
||
49 | case evButton: |
||
50 | id = GetButtonID(); |
||
51 | if (id==1) ExitProcess(); |
||
52 | if (id==10) TakeScreenshot(); |
||
53 | break; |
||
54 | |||
55 | case evReDraw: |
||
56 | sc.get(); |
||
57 | DefineAndDrawWindow(b_screen_width/4, b_screen_height/4, s_screen_width + 9, s_screen_height + GetSkinHeight() + 45,0x74, 0, "EasyShot v0.2",0); |
||
58 | GetProcessInfo(#Form, SelfInfo); |
||
59 | if (Form.status_window>2) break; |
||
60 | DrawBar(0, 0, Form.cwidth, 41, sc.work); |
||
61 | DrawCaptButton(10, 10, 140, 20, 10, sc.work_button, sc.work_button_text, "Make screenshot"); |
||
62 | _PutImage(0, Form.cheight - s_screen_height, s_screen_width, s_screen_height, s_screen); |
||
63 | if (ESDWORD[s_screen]==0) |
||
64 | WriteTextB(Form.cwidth/2 - 60, Form.cheight/2+10, 0x90, 0xFFFfff, "There will be preview"); |
||
65 | else |
||
66 | DrawCaptButton(160, 10, 80, 20, 11, sc.work_button, sc.work_button_text, "Save"); |
||
67 | } |
||
68 | } |
||
69 | } |
||
70 | |||
71 | void TakeScreenshot() { |
||
72 | MinimizeWindow(); |
||
73 | pause(20); |
||
74 | CopyScreen(b_screen, 0, 0, b_screen_width, b_screen_height); |
||
75 | ZoomImageTo50percent(); |
||
76 | ActivateWindow(GetProcessSlot(Form.ID)); |
||
77 | //_PutImage(0, Form.cheight - s_screen_height, s_screen_width, s_screen_height, s_screen); |
||
78 | } |
||
79 | |||
80 | void ZoomImageTo50percent() { |
||
81 | dword point_x, |
||
82 | line_h= b_screen_width * 3, |
||
83 | s_off = s_screen + 3, |
||
84 | b_off = b_screen + 6, |
||
85 | b_off_r, |
||
86 | b_off_g, |
||
87 | b_off_b, |
||
88 | rez_r, |
||
89 | rez_g, |
||
90 | rez_b; |
||
91 | |||
92 | while( (s_off < s_screen + s_screen_length) && (b_off < b_screen + b_screen_length ) ) { |
||
93 | |||
94 | if (b_off < b_screen + line_h) || (b_off > b_screen + b_screen_length - line_h) |
||
95 | { |
||
96 | ESBYTE[s_off] = ESBYTE[b_off]; |
||
97 | ESBYTE[s_off+1] = ESBYTE[b_off+1]; |
||
98 | ESBYTE[s_off+2] = ESBYTE[b_off+2]; |
||
99 | } |
||
100 | else |
||
101 | { |
||
102 | // line[x].R = (line[x+1].R + line[x].R + line[x-1].R + line1[x].R + line2[x].R) / 5; |
||
103 | // line[x].G = (line[x+1].G + line[x].G + line[x-1].G + line1[x].G + line2[x].G) / 5; |
||
104 | // line[x].B = (line[x+1].B + line[x].B + line[x-1].B + line1[x].B + line2[x].B) / 5 |
||
105 | b_off_r = b_off; |
||
106 | b_off_g = b_off + 1; |
||
107 | b_off_b = b_off + 2; |
||
108 | rez_r = ESBYTE[b_off_r+3] + ESBYTE[b_off_r] + ESBYTE[b_off_r-3] + ESBYTE[b_off_r-line_h] + ESBYTE[b_off_r+line_h] / 5; |
||
109 | rez_g = ESBYTE[b_off_g+3] + ESBYTE[b_off_g] + ESBYTE[b_off_g-3] + ESBYTE[b_off_g-line_h] + ESBYTE[b_off_g+line_h] / 5; |
||
110 | rez_b = ESBYTE[b_off_b+3] + ESBYTE[b_off_b] + ESBYTE[b_off_b-3] + ESBYTE[b_off_b-line_h] + ESBYTE[b_off_b+line_h] / 5; |
||
111 | ESBYTE[s_off] = rez_r; |
||
112 | ESBYTE[s_off+1] = rez_g; |
||
113 | ESBYTE[s_off+2] = rez_b; |
||
114 | |||
115 | } |
||
116 | |||
117 | s_off+=3; |
||
118 | b_off+=6; |
||
119 | |||
120 | point_x+=2; |
||
121 | if (point_x >= b_screen_width) |
||
122 | { |
||
123 | b_off += line_h; |
||
124 | point_x = 0; |
||
125 | } |
||
126 | } |
||
127 | } |
||
128 | |||
129 | |||
130 | stop:>>> |