/* Copied and modified from png.c logerror doesn't work here... changed to printf */ static int png_read_bitmap_gui(util::core_file &mfile, HGLOBAL *phDIB, HPALETTE *pPAL) { png_info p; UINT32 i; int bytespp; if (png_read_file(mfile, &p) != PNGERR_NONE) return 0; if (p.color_type != 3 && p.color_type != 2) { printf("PNG Unsupported color type %i (has to be 2 or 3)\n", p.color_type); //png_free(&p); //return 0; Leave in so ppl can see incompatibility } if (p.interlace_method != 0) { printf("PNG Interlace unsupported\n"); png_free(&p); return 0; } /* Convert < 8 bit to 8 bit */ png_expand_buffer_8bit(&p); if (!AllocatePNG(&p, phDIB, pPAL)) { printf("PNG Unable to allocate memory to display screenshot\n"); png_free(&p); return 0; } bytespp = (p.color_type == 2) ? 3 : 1; for (i = 0; i < p.height; i++) { UINT8 *ptr = p.image + i * (p.width * bytespp); if (p.color_type == 2) /*(p->bit_depth > 8) */ { int j; UINT8 bTmp; for (j = 0; j < p.width; j++) { bTmp = ptr[0]; ptr[0] = ptr[2]; ptr[2] = bTmp; ptr += 3; } } store_pixels(p.image + i * (p.width * bytespp), p.width * bytespp); } png_free(&p); return 1; }
/* Copied and modified from png.c */ static int png_read_bitmap(LPVOID mfile, HGLOBAL *phDIB, HPALETTE *pPAL) { png_info p; UINT32 i; int bytespp; if (png_read_file(mfile, &p) != PNGERR_NONE) return 0; if (p.color_type != 3 && p.color_type != 2) { logerror("Unsupported color type %i (has to be 3)\n", p.color_type); free(p.image); return 0; } if (p.interlace_method != 0) { logerror("Interlace unsupported\n"); free (p.image); return 0; } /* Convert < 8 bit to 8 bit */ png_expand_buffer_8bit(&p); if (!AllocatePNG(&p, phDIB, pPAL)) { logerror("Unable to allocate memory for artwork\n"); free(p.image); return 0; } bytespp = (p.color_type == 2) ? 3 : 1; for (i = 0; i < p.height; i++) { UINT8 *ptr = p.image + i * (p.width * bytespp); if (p.color_type == 2) /*(p->bit_depth > 8) */ { int j; UINT8 bTmp; for (j = 0; j < p.width; j++) { bTmp = ptr[0]; ptr[0] = ptr[2]; ptr[2] = bTmp; ptr += 3; } } store_pixels(p.image + i * (p.width * bytespp), p.width * bytespp); } free(p.image); return 1; }