感谢吹水佬。我结构体还没学到跳到文件操作已是不易了,试了一下结构体报错,把原先破绽百出的程序有打了个补丁。上代码
程序代码:
程序代码://盛杰瑞办公设备实验室
//输入x,y坐标,输出改点图像rgb值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ FILE *fp;
int i,x,y; //x,y是坐标
int x1; //真实坐标的偏移量
int y1; //x坐标宽度
unsigned char wenjiantou[100];
unsigned char point[3];
int m_iImageWidth,m_iBitsPerPixel,skip;
while(1) {
if((fp=fopen("D:\\CC\\test.bmp","rb+"))==NULL) // 打开磁盘文件
{
printf("can't open file!\n");
exit(0);
}
printf("要输出点的坐标是(用空格分开x y):");
scanf ("%d %d",&x,&y);
fread(&wenjiantou,1,100,fp); ///把文件头若干个字节放到数组里
x1=wenjiantou[10]; //提取偏移量给x1
y1=wenjiantou[18]+wenjiantou[19]*256+wenjiantou[20]*65536+wenjiantou[21]*4294967296; //提取宽度给y1 把4字节都算上了 即便是把y1定义unsigned long 都会提示丢失数据
////////////每行对齐4字节要填充数据的位数skip
m_iImageWidth=y1; // \\读取文件宽度
m_iBitsPerPixel=wenjiantou[28]; //\\读取文件每个像素的字节数
skip = 4 - ((m_iImageWidth * m_iBitsPerPixel)>>3) & 3; //每行对齐4字节要填充数据的位数skip
//////////////
fseek(fp,(3*x+3*y1*y+x1+y*skip),0); //随机读取位置标记定位
printf("%d\n",(3*x+3*y1*y+x1+y*skip)); //调试用
fread(&point,1,3,fp); //读取指定位置3个字节数据+(3*x+y1*y+x1)
for (i=0;i<3;i++)
printf ("%x ",point[i]); //输出点的buf 16进制方便观察
}
return 0;
fclose(fp);}// 关闭文件}

我是硬件工程师







