用vc++读取jpg并取得每一点像素值(转成bmp也可以)
最好有程序,可以发到我邮箱sanmaozhucc@yahoo.cn,如果回答得好,我会给100分的加分。急用!希望牛人们帮一下忙!感激不尽!...
最好有程序,可以发到我邮箱sanmaozhucc@yahoo.cn,如果回答得好,我会给100分的加分。急用!希望牛人们帮一下忙!感激不尽!
展开
1个回答
展开全部
#include <windows.h>
struct RGB {
unsigned char B;
unsigned char G;
unsigned char R;
};//end struct RGB
void dist(const char * bmpFileName)
{
BITMAPFILEHEADER fh; memset(&fh, 0, sizeof(fh));
FILE * f = fopen(bmpFileName, "rb");
if (!f) return ;
fread(&fh, 1, sizeof(fh), f);
if (fh.bfType != 0x4D42) {
fprintf(stderr, "%s不是一个BMP文件.\n");
fclose(f);
return;
}//end if
BITMAPINFOHEADER h; memset(&h, 0, sizeof(h));
fread(&h, 1, sizeof(h), f);
if (h.biCompression ) {
fprintf(stderr, "该程序无法处理压缩的BMP文件.\n");
fclose(f);
return;
}//end if
if (h.biBitCount != 24) {
fprintf(stderr, "该程序只能处理24位BMP文件\n");
fclose(f);
return ;
}//end if
//总位数为 biSizeImage/3
int bitcount = h.biSizeImage / 3; int i = 0;
//按照RGB格式分配数据
struct RGB * data = new struct RGB[bitcount];
memset(data, 0, sizeof(struct RGB) * bitcount);
fread(data, bitcount, sizeof(struct RGB), f);
fclose(f);
//这里完成了像素的读取
//用data[i]就是第i个像素的信息,以RGB三色表达像素值
//i取值范围是0 ~ bitcount,
//i可以用行列乘积求和表示,像素行列信息在h里面放置。
//使用完后释放内存空间
delete [] data;
}
struct RGB {
unsigned char B;
unsigned char G;
unsigned char R;
};//end struct RGB
void dist(const char * bmpFileName)
{
BITMAPFILEHEADER fh; memset(&fh, 0, sizeof(fh));
FILE * f = fopen(bmpFileName, "rb");
if (!f) return ;
fread(&fh, 1, sizeof(fh), f);
if (fh.bfType != 0x4D42) {
fprintf(stderr, "%s不是一个BMP文件.\n");
fclose(f);
return;
}//end if
BITMAPINFOHEADER h; memset(&h, 0, sizeof(h));
fread(&h, 1, sizeof(h), f);
if (h.biCompression ) {
fprintf(stderr, "该程序无法处理压缩的BMP文件.\n");
fclose(f);
return;
}//end if
if (h.biBitCount != 24) {
fprintf(stderr, "该程序只能处理24位BMP文件\n");
fclose(f);
return ;
}//end if
//总位数为 biSizeImage/3
int bitcount = h.biSizeImage / 3; int i = 0;
//按照RGB格式分配数据
struct RGB * data = new struct RGB[bitcount];
memset(data, 0, sizeof(struct RGB) * bitcount);
fread(data, bitcount, sizeof(struct RGB), f);
fclose(f);
//这里完成了像素的读取
//用data[i]就是第i个像素的信息,以RGB三色表达像素值
//i取值范围是0 ~ bitcount,
//i可以用行列乘积求和表示,像素行列信息在h里面放置。
//使用完后释放内存空间
delete [] data;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询