
用C判断BMP图片颜色的代码修改
用C判断BMP图片颜色的代码修改假设有一张BMP图片:白底,有一个红色正方形(平面),BGR00255的红色。我有个程序代码是读出那个图形的颜色BGR值现在老师要求我加入...
用C判断BMP图片颜色的代码修改
假设有一张BMP图片:白底,有一个红色正方形(平面),BGR 0 0 255的红色。
我有个程序代码是读出那个图形的颜色BGR值
现在 老师要求我加入代码 令源程序能判断这是红色 , 但是有个要求 就是如果该图片为蓝色和绿色也能判断出来。请高人指点,原代码如下:
#include <stdio.h>
#include <stdlib.h>
#define PIAPROW 288
#define PIXPCOLUMN 146
int bmp_read(unsigned char *image, int xsize,int ysize,char *filename)
{
char fname_bmp[128];
sprintf(fname_bmp,"%s.bmp",filename);
FILE *fp;
if(!(fp=fopen(fmame_bmp,"rb")))
return -1;
unsigned char header[54];
fread(headr,sizeof(unsigned char),54,fp);
fread(image,sizeof(unsigned char),(size_t)(long)xize*ysize*3,fp);
fclose;
return 0;
}
int main()
{
unsigned char*image;
int xsize=PLXROW
int ysize=PIXPOCLUMN;
//RGBQUAD pixarray;//一行像素
image=(unsign char *)malloc(siaze_t)xsize * ysize * 3);
if(image==NULL)
return -1;
bmp_read(image,xsize,ysize,"test"); //orgbmp为当前目录下的bmp文件名
unsigned char temp;
int i
for(i=0;i<3;i++)
{
temp=*image
printf("%d\n",temp);
image++;
}
free(image)
return -1;
}
谢谢啦~~十万火急 展开
假设有一张BMP图片:白底,有一个红色正方形(平面),BGR 0 0 255的红色。
我有个程序代码是读出那个图形的颜色BGR值
现在 老师要求我加入代码 令源程序能判断这是红色 , 但是有个要求 就是如果该图片为蓝色和绿色也能判断出来。请高人指点,原代码如下:
#include <stdio.h>
#include <stdlib.h>
#define PIAPROW 288
#define PIXPCOLUMN 146
int bmp_read(unsigned char *image, int xsize,int ysize,char *filename)
{
char fname_bmp[128];
sprintf(fname_bmp,"%s.bmp",filename);
FILE *fp;
if(!(fp=fopen(fmame_bmp,"rb")))
return -1;
unsigned char header[54];
fread(headr,sizeof(unsigned char),54,fp);
fread(image,sizeof(unsigned char),(size_t)(long)xize*ysize*3,fp);
fclose;
return 0;
}
int main()
{
unsigned char*image;
int xsize=PLXROW
int ysize=PIXPOCLUMN;
//RGBQUAD pixarray;//一行像素
image=(unsign char *)malloc(siaze_t)xsize * ysize * 3);
if(image==NULL)
return -1;
bmp_read(image,xsize,ysize,"test"); //orgbmp为当前目录下的bmp文件名
unsigned char temp;
int i
for(i=0;i<3;i++)
{
temp=*image
printf("%d\n",temp);
image++;
}
free(image)
return -1;
}
谢谢啦~~十万火急 展开
1个回答
展开全部
bmp文件有1,4,16,24位等很多种表示一个像素的格式,按LZ给的代码的意思是只处理24位,没有压缩的情况,这样的话for循环三次每次次读到的是一个像素的BGR值.
我理解的意思是你要读出图片中间的一个纯色的正方形的图形的颜色,其他区域是白色。这样的话把for循环那里改一下
unsigned char temp[3];
int i,j;
for( i = 0; i < xsize * ysize; i++ )
{
for( j = 0; j < 3; j++ )
{
temp[j] = *image;
image++;
}
if( temp[0] == 0 && temp[1] == 0 )
{
printf("red\n");
break;
}
else if( temp[0] == 0 && temp[2] == 0 )
{
printf("green\n");
break;
}
else if( temp[1] == 0 && temp[2] == 0 )
{
printf("blue\n");
break;
}
}
我顺手写的,没有测试,如果有问题,把要测试的图片发来我测试一下。
另外,图片的大小最好动态获取,否则容易出错。
我理解的意思是你要读出图片中间的一个纯色的正方形的图形的颜色,其他区域是白色。这样的话把for循环那里改一下
unsigned char temp[3];
int i,j;
for( i = 0; i < xsize * ysize; i++ )
{
for( j = 0; j < 3; j++ )
{
temp[j] = *image;
image++;
}
if( temp[0] == 0 && temp[1] == 0 )
{
printf("red\n");
break;
}
else if( temp[0] == 0 && temp[2] == 0 )
{
printf("green\n");
break;
}
else if( temp[1] == 0 && temp[2] == 0 )
{
printf("blue\n");
break;
}
}
我顺手写的,没有测试,如果有问题,把要测试的图片发来我测试一下。
另外,图片的大小最好动态获取,否则容易出错。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询