| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 947 人关注过本帖
标题:为什么用VC++编写的以下程序不能实现读取一幅BMP图像并保存?求高手指教
只看楼主 加入收藏
liangs323
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-3-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
为什么用VC++编写的以下程序不能实现读取一幅BMP图像并保存?求高手指教
#include<afx.h>
#include<windows.h>
#include<iostream>
#include<stdlib.h>
#include<math.h>

int nWidth;
int nHeight;
int nColorBits;
int nColor;
int nLen;
int nByteWidth;
BYTE *lpBitmap;
BYTE *lpBits;

void OpenFile(CString FileName);
void SaveFile(CString FileName);
void OpenFile(CString FileName)
{
    HANDLE hFile=::CreateFile
(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NOR
MAL,NULL);
    if(hFile==0)
    {
        printf("不能打开文件,请重新选择!\n");
        return;
    }
    DWORD WriteNum;
    BITMAPFILEHEADER BFH;//位图文件头
    ReadFile(hFile,&BFH,14,&WriteNum,NULL);
    if((BFH.bfType!='MB')||(WriteNum!=sizeof(BITMAPFILEHEADER)))
    {
        printf("不是BMP位图文件或数据有误!\n");
        return;
    }
    nLen=GetFileSize(hFile,NULL)-sizeof(BITMAPFILEHEADER);
    lpBitmap=new BYTE[nLen];
    ReadFile(hFile,lpBitmap,nLen,&WriteNum,NULL);
    BITMAPINFOHEADER *BIH=((BITMAPINFOHEADER *)lpBitmap);//位图信息头指

    nWidth=BIH->biWidth;
    nHeight=BIH->biHeight;
    nColorBits=BIH->biBitCount;
    nByteWidth=(nWidth*nColorBits+31)/32*4;
    nColor=(nColorBits>8)?0:(1<<nColorBits);
    lpBits=lpBitmap+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*nColor;
    CloseHandle(hFile);

}


void SaveFile(CString FileName)
{
    HANDLE hFile=::CreateFile
(FileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_N
ORMAL,NULL);
    if(hFile==0)
    {
        printf("不能创建文件,请重新选择!\n");
        return;
    }
    unsigned long WriteNum;
    BITMAPFILEHEADER BFH;
    BFH.bfType='MB';
    BFH.bfSize=nLen+sizeof(BITMAPFILEHEADER);
    BFH.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof
(BITMAPINFOHEADER)+nColor*sizeof(RGBQUAD);
    BFH.bfReserved1=BFH.bfReserved2=0;
    WriteFile(hFile,&BFH,sizeof(BITMAPFILEHEADER),&WriteNum,NULL);
    WriteFile(hFile,(BITMAPINFOHEADER *)lpBitmap,nLen,&WriteNum,NULL);
    CloseHandle(hFile);
   
}

void main(){
    char OpenFileName[100];
    char SaveFileName[100];
    printf("输入待处理的图像路径:\n");
    gets(OpenFileName);
    printf("保存处理图像结果的路径:\n");
    gets(SaveFileName);
    OpenFile(OpenFileName);   
    SaveFile(SaveFileName);
    delete []lpBitmap;
}
搜索更多相关主题的帖子: void include 
2012-03-06 10:37
li442547406
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2011-11-10
收藏
得分:7 
这是c++么怎么看着像c呀
2012-03-06 11:57
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:7 
这是windows编程吧 我没仔细看 不过要是你都没发现是什么问题  那别人就更不会去发现了  像这种问题要自己解决  去看看dx编程好像我看过和你写的差不多的.呵呵

能力 技巧
2012-03-06 22:53
liangs323
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-3-6
收藏
得分:0 
回复 3楼 非死亡!
的确是图像编程。编译都没问题,就是没结果
2012-03-07 09:39
rodgeliao
Rank: 2
等 级:论坛游民
帖 子:3
专家分:21
注 册:2006-12-12
收藏
得分:7 
跟踪一下你的读入函数,看看指针的值是否正确
2012-03-07 11:13
liangs323
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-3-6
收藏
得分:0 
回复 5楼 rodgeliao
谢谢!是不是图像路径的输入格式有问题?比如说D盘有一张BMP图像,执行的时候我输的是D:1.bmp,然后想保存在C盘,保存路径直接输的是C。
2012-03-07 17:15
快速回复:为什么用VC++编写的以下程序不能实现读取一幅BMP图像并保存?求高手指 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062096 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved