97 FreeMem(image^.buffer, image^.size); |
97 FreeMem(image^.buffer, image^.size); |
98 Dispose(image); |
98 Dispose(image); |
99 SaveScreenshot:= 0; |
99 SaveScreenshot:= 0; |
100 end; |
100 end; |
101 |
101 |
102 {$ELSE} // no PNG_SCREENSHOTS |
102 {$ELSE} //PNG_SCREENSHOTS |
103 |
103 {$IFDEF WINDOWS} |
|
104 function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export; |
|
105 var |
|
106 surface: PSDL_Surface; |
|
107 image: PScreenshot; |
|
108 mirror: PByte; |
|
109 row, stride: LongInt; |
|
110 begin |
|
111 image:= PScreenshot(screenshot); |
|
112 mirror:= PByte(GetMem(image^.size)); |
|
113 stride:= image^.width * 4; |
|
114 |
|
115 for row:= 0 to image^.height - 1 do |
|
116 Move((image^.buffer + row * stride)^, |
|
117 (mirror + (image^.height - row - 1) * stride)^, |
|
118 stride); |
|
119 |
|
120 surface:= SDL_CreateRGBSurfaceFrom( |
|
121 mirror, |
|
122 image^.width, image^.height, 32, image^.width * 4, |
|
123 $000000FF, $0000FF00, $00FF0000, $FF000000); |
|
124 |
|
125 if surface <> nil then |
|
126 begin |
|
127 IMG_SavePNG(surface, Str2PChar(image^.filename)); |
|
128 SDL_FreeSurface(surface); |
|
129 end; |
|
130 |
|
131 FreeMem(mirror, image^.size); |
|
132 FreeMem(image^.buffer, image^.size); |
|
133 Dispose(image); |
|
134 SaveScreenshot:= 0; |
|
135 end; |
|
136 {$ELSE} //WINDOWS |
104 // this funtion will be executed in separate thread |
137 // this funtion will be executed in separate thread |
105 function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export; |
138 function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export; |
106 var f: file; |
139 var f: file; |
107 // Windows Bitmap Header |
140 // Windows Bitmap Header |
108 head: array[0..53] of Byte = ( |
141 head: array[0..53] of Byte = ( |
167 FreeMem(image^.buffer, image^.size); |
200 FreeMem(image^.buffer, image^.size); |
168 Dispose(image); |
201 Dispose(image); |
169 SaveScreenshot:= 0; |
202 SaveScreenshot:= 0; |
170 end; |
203 end; |
171 |
204 |
172 {$ENDIF} // no PNG_SCREENSHOTS |
205 {$ENDIF} // WINDOWS |
|
206 {$ENDIF} // PNG_SCREENSHOTS |
173 |
207 |
174 {$IFDEF USE_VIDEO_RECORDING} |
208 {$IFDEF USE_VIDEO_RECORDING} |
175 // make image k times smaller (useful for saving thumbnails) |
209 // make image k times smaller (useful for saving thumbnails) |
176 procedure ReduceImage(img: PByteArray; width, height, k: LongInt); |
210 procedure ReduceImage(img: PByteArray; width, height, k: LongInt); |
177 var i, j, i0, j0, w, h, r, g, b: LongInt; |
211 var i, j, i0, j0, w, h, r, g, b: LongInt; |