资源简介

bmp文件的读取,可以获得其RGB值,并能按给定大小保存成bmp文件 bmp file to read, get their RGB values, and preservation of a given size into a bmp file

资源截图

代码片段和文件信息

#include “img.h“

#define __WIN32__
#ifdef __WIN32__
#include 
#include 

//   BMP文件头 
#pragma pack(push2)
typedef struct { 
uint16_t bfType;   //   文件类型 
uint32_t bfSize;   //   文件大小 
uint16_t bfReserved1;   //   保留位 
uint16_t bfReserved2;   //   保留位 
uint32_t bfOffBits;   //   数据偏移位置 
}BMPFILEHEADER; 
#pragma pack(pop)

//   BMP信息头 
typedef struct { 
uint32_t   biSize;   /*此结构大小*/
int32_t    biWidth;   /*图像宽度*/
int32_t    biHeight;   //   图像高度 
uint16_t   biPlanes;   //   调色板数量 
uint16_t   biBitCount;   //   每个象素对应的位数,24:24位图,32:带alpha通道的24位图 
uint32_t   biCompression;   //   压缩 
uint32_t   biSizeImage;   //   图像大小 
int32_t    biXPelsPerMeter;//   横向分辨率 
int32_t    biYPelsPerMeter;//   纵向分辨率 
uint32_t   biClrUsed;   //   颜色使用数 
uint32_t   biClrImportant;   //   重要颜色数 
}BMPINFOHEADER; 

/*BMP 调色板信息结构*/
typedef struct tagRGBQUAD {
uint8_t rgbBlue;
uint8_t rgbGreen;
uint8_t rgbRed;
uint8_t rgbReserved;
} RGBQUAD;

#define WIDTHBYTES(i)    ((i+31)/32*4)
/*
*读取bmp格式文件,同时把24位彩色转换成256色的灰度图象
*   *img: 图象数据存储对象.
* *filename: BMP文件名.
*/
static int8_t read_image_bmp_win32(image_t *img const int8_t *filename)
{
int i j k pixel_size; 
uint8_t temp;
FILE *file; 
BMPFILEHEADER bmpFile; 
BMPINFOHEADER bmpInfo; 
RGBQUAD rgb[256];

uint8_t *img_data *ptr_cur;
uint32_t image_sizeline_bytesoffset;

file = fopen(filename“rb “); 
if (file == NULL) { 
printf(“Open File Error \n“);
return -1; 


/*获取BMP文件头和信息头*/
rewind(file);  
fread(&bmpFile sizeof(BMPFILEHEADER) 1 file);   
fread(&bmpInfo sizeof(BMPINFOHEADER) 1 file); 
/*验证文件类型 */
if (bmpFile.bfType != 0x4D42) { 
printf(“File Type Error \n“);
fclose(file); 
return -1; 


/*获取图像色彩数 */
pixel_size = bmpInfo.biBitCount >> 3;

img->height = bmpInfo.biHeight;
img->width = bmpInfo.biWidth;
line_bytes = img->width * pixel_size + 3 - ((img->width * pixel_size + 3) & 3);
image_size = img->height * line_bytes;
img_data = (uint8_t*)malloc(image_size * sizeof(uint8_t));
if(NULL == img_data )
{
printf(“malloc img_data errornot enough memory !\n“);
fclose(file);
return -1;
}

img->release_image(img);
img->data = (uint8_t*)malloc(img->height * img->width);
if(NULL == img->data )
{
printf(“malloc img_data errornot enough memory !\n“);
free(img_data);
fclose(file);
return -1;
}
offset = 1 << bmpInfo.biBitCount;
/*读取颜色表*/
if(bmpInfo.biBitCount <= 8)
fread(rgb4offsetfile); 

/* 读取图象数据*/
fread(img_data 1 image_size file);

if(1 == pixel_size)/*256色BMP*/
{
for( i=0; iheight; ++i)
{
memcpy(img->data + img->width * iimg_data + ((img->height - i - 1) * line_bytes)img->width);
}
}
else if(3 == pixel_size)/*24位BMP*/
{
init_RGB_table();
k = 0;
/*转换RGB格式的亮度值Y*/
for (i=0; iheight; i++)

for (j=0; jwidth; j++) 

ptr_cur = img_data + ((im

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5639  2008-07-08 16:18  imagedeblur\bmpio.c

     文件       4576  2008-07-14 19:37  imagedeblur\imagedeblur.dsp

     文件        530  2008-07-14 09:53  imagedeblur\imagedeblur.dsw

     文件      58368  2008-09-10 17:10  imagedeblur\imagedeblur.ncb

     文件      49664  2008-09-10 17:10  imagedeblur\imagedeblur.opt

     文件        256  2008-09-10 17:10  imagedeblur\imagedeblur.plg

     文件       4084  2008-07-15 09:22  imagedeblur\img.c

     文件       2559  2008-07-14 09:54  imagedeblur\img.h

     文件       1450  2008-07-14 18:38  imagedeblur\img_base_lib.c

     文件        637  2008-07-15 09:49  imagedeblur\test.c

     文件     786488  2008-07-07 20:40  imagedeblur\test2(512.10).bmp

     文件     263222  2008-07-15 09:22  imagedeblur\test2out(512.10).bmp

     文件     197686  2008-09-10 17:10  imagedeblur\testy1(30.15).bmp

     文件     589880  2008-07-15 09:47  imagedeblur\y1(30.15).bmp

     目录          0  2008-09-10 17:21  imagedeblur

----------- ---------  ---------- -----  ----

              1965257                    16


评论

共有 条评论