Changeset 7e38970d in mainline for uspace/lib/gfximage/src
- Timestamp:
- 2020-12-07T00:08:37Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 25f26600
- Parents:
- 7a873f0 (diff), 8596474 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/lib/gfximage/src
- Files:
-
- 2 moved
-
tga.c (moved) (moved from uspace/lib/draw/codec/tga.c ) (7 diffs)
-
tga_gz.c (moved) (moved from uspace/lib/draw/codec/tga.gz.c ) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/gfximage/src/tga.c
r7a873f0 r7e38970d 40 40 #include <stdbool.h> 41 41 #include <pixconv.h> 42 #include <draw/codec.h> 42 #include <gfx/bitmap.h> 43 #include <gfximage/tga.h> 44 #include <io/pixelmap.h> 43 45 44 46 typedef struct { … … 169 171 * alpha channel. 170 172 * 171 * @param[in] data Memory representation of TGA. 172 * @param[in] size Size of the representation (in bytes). 173 * @param[in] flags Surface creation flags. 174 * 175 * @return Newly allocated surface with the decoded content. 176 * @return NULL on error or unsupported format. 177 * 178 */ 179 surface_t *decode_tga(void *data, size_t size, surface_flags_t flags) 173 * @param gc Graphic context 174 * @param data Memory representation of gzipped TGA. 175 * @param size Size of the representation (in bytes). 176 * @param rbitmap Place to store pointer to new bitmap 177 * @param rrect Place to store bitmap rectangle 178 * 179 * @return EOK un success or an error code 180 */ 181 errno_t decode_tga(gfx_context_t *gc, void *data, size_t size, 182 gfx_bitmap_t **rbitmap, gfx_rect_t *rrect) 180 183 { 184 gfx_bitmap_params_t params; 185 gfx_bitmap_alloc_t alloc; 186 gfx_bitmap_t *bitmap = NULL; 187 pixelmap_t pixelmap; 188 errno_t rc; 189 181 190 tga_t tga; 182 191 if (!decode_tga_header(data, size, &tga)) 183 return NULL;192 return EINVAL; 184 193 185 194 /* … … 192 201 default: 193 202 /* Unsupported */ 194 return NULL;203 return ENOTSUP; 195 204 } 196 205 … … 198 207 case IMG_BGRA: 199 208 if (tga.img_bpp != 24) 200 return NULL;209 return ENOTSUP; 201 210 break; 202 211 case IMG_GRAY: 203 212 if (tga.img_bpp != 8) 204 return NULL;213 return ENOTSUP; 205 214 break; 206 215 default: 207 216 /* Unsupported */ 208 return NULL;217 return ENOTSUP; 209 218 } 210 219 211 220 if (tga.img_alpha_bpp != 0) 212 return NULL;221 return ENOTSUP; 213 222 214 223 sysarg_t twidth = tga.startx + tga.width; 215 224 sysarg_t theight = tga.starty + tga.height; 216 225 217 surface_t *surface = surface_create(twidth, theight, NULL, flags); 218 if (surface == NULL) 219 return NULL; 226 gfx_bitmap_params_init(¶ms); 227 params.rect.p1.x = twidth; 228 params.rect.p1.y = theight; 229 230 rc = gfx_bitmap_create(gc, ¶ms, NULL, &bitmap); 231 if (rc != EOK) 232 return rc; 233 234 rc = gfx_bitmap_get_alloc(bitmap, &alloc); 235 if (rc != EOK) { 236 gfx_bitmap_destroy(bitmap); 237 return rc; 238 } 239 240 pixelmap.width = twidth; 241 pixelmap.height = theight; 242 pixelmap.data = alloc.pixels; 220 243 221 244 /* … … 233 256 pixel_t pixel = 234 257 bgr_888_2pixel(((uint8_t *) tga.img_data) + offset); 235 surface_put_pixel(surface, x, theight - y - 1, pixel);258 pixelmap_put_pixel(&pixelmap, x, theight - y - 1, pixel); 236 259 } 237 260 } … … 245 268 pixel_t pixel = 246 269 gray_8_2pixel(((uint8_t *) tga.img_data) + offset); 247 surface_put_pixel(surface, x, theight - y - 1, pixel);270 pixelmap_put_pixel(&pixelmap, x, theight - y - 1, pixel); 248 271 } 249 272 } … … 253 276 } 254 277 255 return surface; 278 *rbitmap = bitmap; 279 *rrect = params.rect; 280 return EOK; 256 281 } 257 282 258 /** Encode Truevision TGA format259 *260 * Encode Truevision TGA format into an array.261 *262 * @param[in] surface Surface to be encoded into TGA.263 * @param[out] pdata Pointer to the resulting array.264 * @param[out] psize Pointer to the size of the resulting array.265 *266 * @return True on succesful encoding.267 * @return False on failure.268 *269 */270 bool encode_tga(surface_t *surface, void **pdata, size_t *psize)271 {272 // TODO273 return false;274 }275 276 283 /** @} 277 284 */ -
uspace/lib/gfximage/src/tga_gz.c
r7a873f0 r7e38970d 37 37 #include <gzip.h> 38 38 #include <stdlib.h> 39 #include <draw/codec.h> 39 #include <gfximage/tga.h> 40 #include <gfximage/tga_gz.h> 40 41 41 42 /** Decode gzipped Truevision TGA format 42 43 * 43 * Decode gzipped Truevision TGA format and create a surface44 * Decode gzipped Truevision TGA format and create a bitmap 44 45 * from it. The supported variants of TGA are limited those 45 46 * supported by decode_tga(). 46 47 * 47 * @param[in] data Memory representation of gzipped TGA. 48 * @param[in] size Size of the representation (in bytes). 49 * @param[in] flags Surface creation flags. 48 * @param gc Graphic context 49 * @param data Memory representation of gzipped TGA. 50 * @param size Size of the representation (in bytes). 51 * @param rbitmap Place to store pointer to new bitmap 52 * @param rrect Place to store bitmap rectangle 50 53 * 51 * @return Newly allocated surface with the decoded content. 52 * @return NULL on error or unsupported format. 53 * 54 * @return EOK un success or an error code 54 55 */ 55 surface_t *decode_tga_gz(void *data, size_t size, surface_flags_t flags) 56 errno_t decode_tga_gz(gfx_context_t *gc, void *data, size_t size, 57 gfx_bitmap_t **rbitmap, gfx_rect_t *rrect) 56 58 { 57 59 void *data_expanded; 58 60 size_t size_expanded; 61 errno_t rc; 59 62 60 errno_t ret= gzip_expand(data, size, &data_expanded, &size_expanded);61 if (r et!= EOK)62 return NULL;63 rc = gzip_expand(data, size, &data_expanded, &size_expanded); 64 if (rc != EOK) 65 return rc; 63 66 64 surface_t *surface = decode_tga(data_expanded, size_expanded, flags); 65 67 rc = decode_tga(gc, data_expanded, size_expanded, rbitmap, rrect); 66 68 free(data_expanded); 67 return surface; 68 } 69 70 /** Encode gzipped Truevision TGA format 71 * 72 * Encode gzipped Truevision TGA format into an array. 73 * 74 * @param[in] surface Surface to be encoded into gzipped TGA. 75 * @param[out] pdata Pointer to the resulting array. 76 * @param[out] psize Pointer to the size of the resulting array. 77 * 78 * @return True on succesful encoding. 79 * @return False on failure. 80 * 81 */ 82 bool encode_tga_gz(surface_t *surface, void **pdata, size_t *psize) 83 { 84 // TODO 85 return false; 69 return rc; 86 70 } 87 71
Note:
See TracChangeset
for help on using the changeset viewer.
