Changeset 7e38970d in mainline for uspace/lib/gfximage/src/tga.c
- Timestamp:
- 2020-12-07T00:08:37Z (4 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, 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. - File:
-
- 1 moved
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 */
Note:
See TracChangeset
for help on using the changeset viewer.