Esempio n. 1
0
int gfwx_PngWriteFile(const char* filename, uint8_t* data, uint32_t width, uint32_t height, uint32_t bytesPerPixel)
{
	int status = -1;
	int png_status;
	int row_stride;
	png_image image;

	memset(&image, 0, sizeof(png_image));
	image.version = PNG_IMAGE_VERSION;
	image.format = (bytesPerPixel == 4) ? PNG_FORMAT_BGRA : PNG_FORMAT_BGR;
	image.width = width;
	image.height = height;

	row_stride = PNG_IMAGE_ROW_STRIDE(image);

	png_status = png_image_write_to_file(&image, filename, 0,
		(const void*) data, row_stride, NULL);

	if (!png_status)
		goto exit;

	status = 1;

exit:
	png_image_free(&image);
	return status;
}
Esempio n. 2
0
int gfwx_PngReadFile(const char* filename, uint8_t** pData, uint32_t* pWidth, uint32_t* pHeight, uint32_t bytesPerPixel)
{
	int status = -1;
	int png_status;
	png_image image;
	int row_stride;
	uint8_t* buffer = NULL;

	memset(&image, 0, sizeof(png_image));
	image.version = PNG_IMAGE_VERSION;

	png_status = png_image_begin_read_from_file(&image, filename);

	if (!png_status)
		goto exit;

	image.format = (bytesPerPixel == 4) ? PNG_FORMAT_BGRA : PNG_FORMAT_BGR;
	row_stride = PNG_IMAGE_ROW_STRIDE(image);

	buffer = malloc(PNG_IMAGE_SIZE(image));

	if (!buffer)
		goto exit;

	png_status = png_image_finish_read(&image, NULL, buffer, row_stride, NULL);

	if (!png_status)
		goto exit;

	*pWidth = image.width;
	*pHeight = image.height;
	*pData = buffer;

	status = 1;

exit:
	if (status < 1)
		free(buffer);

	png_image_free(&image);
	return status;
}
Esempio n. 3
0
static int read_png(const char *fname, image *image, gradient *g)
{
	int result = 0;
	memset(&image->image, 0, sizeof image->image);
	image->image.version = PNG_IMAGE_VERSION;

	if (png_image_begin_read_from_file(&image->image, image->file_name))
	{
		image->image.format = PNG_FORMAT_RGBA;
		image->stride = PNG_IMAGE_ROW_STRIDE(image->image);
		image->buffer = malloc(PNG_IMAGE_SIZE(image->image));
		image->pixel_bytes = PNG_IMAGE_PIXEL_SIZE(image->image.format);

		if (image->buffer != NULL) {
			if(png_image_finish_read(&image->image, NULL /*background*/,
									 image->buffer, (png_int_32)image->stride,
									 image->colormap)) {

				if(calculate_gradient(image, g))
					result = 1;
				else
					printf("pngtocss: Gradient type not supported\n");
			}
			else {
				fprintf(stderr, "pngtocss: read %s: %s\n", fname,
						image->image.message);

				png_image_free(&image->image);
			}
		}
		else
			fprintf(stderr, "pngtocss: out of memory: %lu bytes\n",
					(unsigned long)PNG_IMAGE_SIZE(image->image));
	}
	else
		/* Failed to read the argument: */
		fprintf(stderr, "pngtocss: %s: %s\n", fname, image->image.message);

	return result;
}