获取png,tga宽和高

1.准备好png,zlib库以及头文件

头文件

png.h  pngconf.h  zconf.h  zlib.h

库文件

libpng.so  libz.so

2.编译参数

arm-linux-gnueabi-gcc linux_imghw.c -o linux_imghw -lz -lpng -L./

 

3.实例

#include 

#include "png.h"


void tga_read(char *file_path)
{
	char type_header[12] = {0};
	char header[6] = {0};
	int image_width;
	int image_height;
	
	FILE *of = fopen(file_path, "rb");
 
	
	fread(type_header, sizeof(char), sizeof(type_header), of);
 
	
	fread(header, sizeof(char), sizeof(header), of);
 
	image_width = header[1] * 256 + header[0];
	image_height = header[3] * 256 + header[2];
 
	fclose(of);
	printf("%d,w:%d,h:%d\n", image_width < image_height, image_width, image_height);

}

int png_read(char *file_path)
{
    png_structp png_ptr;
    png_infop info_ptr;
    int color_type = 0; 
    int image_size = 0;
    int image_width, image_height;
	
    FILE *p_fp;
 
    if ((p_fp = fopen(file_path, "rb")) == NULL)
    {
        fprintf(stderr, "%s open fail!!!\n", file_path);
        return -1;
    }
 
    /* 创建一个png_structp结构体,如果不想自定义错误处理,后3个参数可以传NULL */
    png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);	
    if (png_ptr == NULL)
    {
        fclose(p_fp);
        return -1;
    }
 
	/* 创建一个info_ptr,必须的 */	
    info_ptr = png_create_info_struct(png_ptr);
    
    if (info_ptr == NULL)
    {
        fclose(p_fp);
        png_destroy_read_struct(&png_ptr, NULL, NULL);
        return -1;
    }
 
    /* 如果上面png_create_read_struct没有自定义错误处理,这里是必须的 */
    if (setjmp(png_jmpbuf(png_ptr)))
    {
        png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
        fclose(p_fp);
 
        return -1;
    }
 
    /* 初始化文件IO */
	png_init_io(png_ptr, p_fp);
 	png_set_sig_bytes(png_ptr, 0);
	png_read_info(png_ptr, info_ptr);

	/* 获取图像的宽高 */
	image_width = png_get_image_width(png_ptr, info_ptr);       
	image_height = png_get_image_height(png_ptr, info_ptr); 

	printf("%d,w:%d,h:%d\n", image_width

 

下载

https://download.csdn.net/download/zengzhihao/12471215

 

 

你可能感兴趣的:(获取png,tga宽和高)