vc 读取bmp图像

我用vc6.0做了个读取bmp图像转换成灰度值,输出到文本。编译无错,但在运行时遇到问题关闭,提示说是不能访问内存。个人感觉是指针越位。在读入b值时即出错,无法读取指针值... 我用vc6.0做了个读取bmp图像转换成灰度值,输出到文本。编译无错,但在运行时遇到问题关闭,提示说是不能访问内存。个人感觉是指针越位。在读入b值时即出错,无法读取指针值。换个电脑也出现一样的问题。将代码粘贴如下:望大侠们多多指教,感激不尽。
#include <fstream.h>
#include <iostream.h>
#include <iomanip.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <malloc.h>
#include <conio.h>

int main()
{
BITMAPFILEHEADER m_sBMFH; //位图文件头
BITMAPINFOHEADER m_sBMIH; //位图信息头
BYTE * m_pBData; //位图数据
ifstream fin("i:3.bmp");

//读取文件头
fin.read((char *)(&m_sBMFH),sizeof(BITMAPFILEHEADER));

//读取文件信息头
fin.read((char *)(&m_sBMIH),sizeof(BITMAPINFOHEADER));

m_pBData = new BYTE [m_sBMIH.biSizeImage];
fin.read((char *)(m_pBData),m_sBMIH.biSizeImage);

int k = 0,i,j;
int r,g,b;
int Gray;
BYTE *pt=NULL;
ofstream fout("i:gray3.txt");
int t=0;

if(m_sBMIH.biWidth*3%4!=0)t=4-m_sBMIH.biWidth*3%4; //位图数据要求每行字节数必须是4的倍数,不足补齐t

for(i=m_sBMIH.biHeight-1;i>=0;i--)
{

fout<<"第"<<m_sBMIH.biHeight-i<<"行像素点的灰度值:\n";
for(j=0;j<m_sBMIH.biWidth;j++)
{
pt = m_pBData+i*(m_sBMIH.biWidth*3+t)+3*j ;
b= *pt;
g = *(pt+1);
r = *(pt+2);
// Gray = (r*0.299+g*0.587+b*0.114);
Gray = (r1*38 + g1*75 + b1*15) >> 7;
fout<<setiosflags(ios::left)<<setw(4)<<Gray;
}
fout<<endl;
}
fout.close();
return 1;
}
修改路径,仍然不行。就是在读取pt的指针值时,无法读取,无法访问那块内存。之前可以运行的,过了一天就报错了。
展开
 我来答
cgsd2004
2010-05-11 · TA获得超过419个赞
知道小有建树答主
回答量:518
采纳率:55%
帮助的人:415万
展开全部
ifstream fin("i:3.bmp");

你的文件路径不对,检查一下
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式