103 {$IFDEF WINDOWS} |
103 {$IFDEF WINDOWS} |
104 function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export; |
104 function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export; |
105 var |
105 var |
106 surface: PSDL_Surface; |
106 surface: PSDL_Surface; |
107 image: PScreenshot; |
107 image: PScreenshot; |
108 mirror: PByte; |
108 rowBuffer: PByte; |
109 row, stride: LongInt; |
109 row, stride: LongInt; |
110 begin |
110 begin |
111 image:= PScreenshot(screenshot); |
111 image:= PScreenshot(screenshot); |
112 mirror:= PByte(GetMem(image^.size)); |
|
113 stride:= image^.width * 4; |
112 stride:= image^.width * 4; |
114 |
113 rowBuffer:= PByte(GetMem(stride)); |
115 for row:= 0 to image^.height - 1 do |
114 |
|
115 for row:= 0 to (image^.height div 2) - 1 do |
|
116 begin |
|
117 Move((image^.buffer + (image^.height - row - 1) * stride)^, |
|
118 rowBuffer^, |
|
119 stride); |
116 Move((image^.buffer + row * stride)^, |
120 Move((image^.buffer + row * stride)^, |
117 (mirror + (image^.height - row - 1) * stride)^, |
121 (image^.buffer + (image^.height - row - 1) * stride)^, |
118 stride); |
122 stride); |
|
123 Move(rowBuffer^, |
|
124 (image^.buffer + row * stride)^, |
|
125 stride); |
|
126 end; |
119 |
127 |
120 surface:= SDL_CreateRGBSurfaceFrom( |
128 surface:= SDL_CreateRGBSurfaceFrom( |
121 mirror, |
129 image^.buffer, |
122 image^.width, image^.height, 32, image^.width * 4, |
130 image^.width, image^.height, 32, stride, |
123 $000000FF, $0000FF00, $00FF0000, $FF000000); |
131 $000000FF, $0000FF00, $00FF0000, $FF000000); |
124 |
132 |
125 if surface <> nil then |
133 if surface <> nil then |
126 begin |
134 begin |
127 IMG_SavePNG(surface, Str2PChar(image^.filename)); |
135 IMG_SavePNG(surface, Str2PChar(image^.filename)); |
128 SDL_FreeSurface(surface); |
136 SDL_FreeSurface(surface); |
129 end; |
137 end; |
130 |
138 |
131 FreeMem(mirror, image^.size); |
139 FreeMem(rowBuffer, stride); |
132 FreeMem(image^.buffer, image^.size); |
140 FreeMem(image^.buffer, image^.size); |
133 Dispose(image); |
141 Dispose(image); |
134 SaveScreenshot:= 0; |
142 SaveScreenshot:= 0; |
135 end; |
143 end; |
136 {$ELSE} //WINDOWS |
144 {$ELSE} //WINDOWS |