| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6598 人关注过本帖
标题:C语言读入图像
只看楼主 加入收藏
siqin123
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2011-3-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
C语言读入图像
      C语言读入图像
     
      原理:通过文件流的方式读入到Byte的二进制数组中,之后,使用图像分析算法将图像显示到屏幕上。要将数组中的值转换为像素。
   
      可是有点不知道怎么编程
搜索更多相关主题的帖子: C语言 二进制 
2011-03-11 16:50
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:5 
这个也太简单了吧。》》??
2011-03-11 16:57
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:5 
c语言有点复杂

读的思路:
根据bmp的header(长宽 位数 信息) 开始读文件 读出每个位置点的RGB分量,用3个3维数组,R[x][y][val],G[x][y][val],B[x][y][val]
RGB组合成像素值(可能要求你输出灰度值),一个3维数组,P[x][y][val]


程序代码:
//function definition
void ImageRead(AnsiString name,int &width,int &height,int *r,int *g,int *b)
{
    //read image
    FILE *fp; 
    if((fp=fopen(name.c_str(),"rb"))==NULL) {
        printf("cannot open bmp.name\n");
        return ;
    }    
    fread(&bfType,sizeof(WORD),1,fp); 
    if(bfType!=0x4d42) {//该值必需是0x4D42,也就是字符'BM'
        printf("the input map is not bmp type");        
        return ;
    } 
    fread(&bfSize,sizeof(DWORD),1,fp);
    fread(&bfReserved1,sizeof(WORD),1,fp); 
    fread(&bfReserved2,sizeof(WORD),1,fp); 
    fread(&bfOffBits,sizeof(DWORD),1,fp); 
    fread(&bih,sizeof(BITMAPINFOHEADER),1,fp); 
    width=bih.biWidth ; 
    height=bih.biHeight;
    if(width % 4 !=0) 
        width=width+ (4-width % 4); 
    DWORD size=width*(bih.biBitCount/8)*height;
    unsigned char* pData=new unsigned char[size]; 

    fread(pData,size,1,fp); 
    
    int bmWidthBytes=width*bih.biBitCount /8; 
    int bmBitsPixel=bih.biBitCount ; 
    int nBit=bmBitsPixel/8; 

    int z; 
    
    for (int y=0; y<height; y++) 
    { 
        for (int x=0; x<width; x++) 
        { 
            z=height-y-1; 
            *(r+(y*width+x))=pData[x*nBit+2+z*bmWidthBytes];
            *(g+(y*width+x))=pData[x*nBit+1+z*bmWidthBytes];
            *(b+(y*width+x))=pData[x*nBit+z*bmWidthBytes];
        } 
    } 
}

void ImageWrite(AnsiString name1,int *r,int *g,int *b)
{
    //read image
    FILE *fw;
    fw=fopen(name1.c_str(),"wb");
    
    fwrite(&bfType,sizeof(WORD),1,fw);
    fwrite(&bfSize,sizeof(DWORD),1,fw);
    fwrite(&bfReserved1,sizeof(WORD),1,fw); 
    fwrite(&bfReserved2,sizeof(WORD),1,fw); 
    fwrite(&bfOffBits,sizeof(DWORD),1,fw); 
    fwrite(&bih,sizeof(BITMAPINFOHEADER),1,fw);

    int width=bih.biWidth ; 
    int height=bih.biHeight;
    if(width % 4 !=0) 
        width=width+ (4-width % 4); 
    DWORD size=width*(bih.biBitCount/8)*height;
    unsigned char* pData=new unsigned char[size]; 

    int bmWidthBytes=width*bih.biBitCount /8; 
    int bmBitsPixel=bih.biBitCount ; 
    int nBit=bmBitsPixel/8; 

    
    int z; 
    for (int y=0; y<height; y++) 
    { 
        for (int x=0; x<width; x++) 
        { 
            z=height-y-1; 
            pData[x*nBit+2+z*bmWidthBytes]=*(r+(y*width+x));
            pData[x*nBit+1+z*bmWidthBytes]=*(g+(y*width+x));
            pData[x*nBit+z*bmWidthBytes]=*(b+(y*width+x));        
        } 
    } 

    fwrite(pData,size,1,fw);
}




[ 本帖最后由 njkido 于 2011-3-18 10:04 编辑 ]
2011-03-11 17:09
hackzbst
Rank: 2
等 级:论坛游民
帖 子:27
专家分:54
注 册:2009-6-10
收藏
得分:5 
这个应该要看你使用什么编译器哦.关于BMP读取和显示我倒是只在 嵌入式C上实现过.因为下层已经提供了对buffer显示的接口.我们只需要做解压和读数据就OK了,傻瓜型,呵呵.

你把问题补全点  看看高手解答

别迷恋哥,哥只是一个传说......
2011-03-11 17:25
limingzhen90
Rank: 2
等 级:论坛游民
帖 子:53
专家分:72
注 册:2010-12-31
收藏
得分:5 
高手快来,我要学习学习

入门了吗?
2011-03-11 18:00
快速回复:C语言读入图像
数据加载中...
 
   



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

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