免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2266 | 回复: 5
打印 上一主题 下一主题

用c建个最简单的看图程序该怎么弄啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-19 10:06 |只看该作者 |倒序浏览
麻烦诸位指点一下,利用最基础的fb的调用,能看某一种格式的图像,黑白彩色都可以,该怎么做在下完全没有概念。
例如说要看bmp格式的,应该用到哪些东西?从什么地方开始赋予位值和色值?给完一个点之后该做什么?……

论坛徽章:
0
2 [报告]
发表于 2008-02-19 11:35 |只看该作者
首先了解bmp格式.一般是bmp头加rgb色彩空间,fb本身就支持rgb的显示.所以很简单.

论坛徽章:
0
3 [报告]
发表于 2008-02-19 11:50 |只看该作者

刚好写了一个 分享一下 顺便问个问题

struct bmptou
{
    char type[2];
    unsigned long size;
    unsigned long baoliu;//都是0

    unsigned long offset;//数据的偏移值

    unsigned long bmpheadsize;//但前图片的头大小

    unsigned long bmpwidth;
    unsigned long bmpheigth;
    short int planes;//该制总是1 位图的位面数

    short int bitcount;//像素的为数

    unsigned long compression;//压缩说明

    unsigned long bmpdatasize;//数据大小 数据以4位对其

    unsigned long hr;//用像素/米别是的水平分辨率

    unsigned long vr;//垂直

    unsigned long color;//位图的颜色书

    unsigned long impcolor;
    
} objbmp;

int main()
{
    FILE *bmpfp=NULL;

    if((bmpfp=fopen("image.bmp","rb"))==NULL){
            printf("Read the bmp file has failed\n");
            exit(1);
            }
//开始解析

    headread(bmpfp);
    pixread(bmpfp);
    newbmp();                     
    fclose(bmpfp);
    return 0;
}



      
void  headread(FILE *fpin)                               //read the bmp file head 1078 byte

{
    int num1;
    
     num1 = fread( objbmp.type,1,2,fpin );
printf( "%s\n",objbmp.type );
    num1 = fread( &objbmp.size,sizeof( unsigned long ),1,fpin );
printf( "%lu\n",objbmp.size );
    num1 = fread( &objbmp.baoliu,sizeof( unsigned long ),1,fpin );
    num1 = fread( &objbmp.offset,sizeof( unsigned long ),1,fpin );
printf( "%lu\n",objbmp.offset );
    num1 = fread( &objbmp.bmpheadsize,sizeof( unsigned long ),1,fpin );
printf( "%lu\n",objbmp.bmpheadsize );
    num1 = fread( &objbmp.bmpwidth,sizeof( unsigned long ),1,fpin );
printf( "width %lu\n",objbmp.bmpwidth );
    num1= fread( &objbmp.bmpheigth,sizeof( unsigned long ),1,fpin );
printf( "heigth %lu\n",objbmp.bmpheigth );
    num1 = fread( &objbmp.planes,sizeof( short int ),1,fpin );
printf( "ceng %d\n",objbmp.planes );
    num1  = fread( &objbmp.bitcount,sizeof( short int ),1,fpin );
printf( "bit count %d\n",objbmp.bitcount );
    num1 = fread( &objbmp.compression,sizeof( unsigned long ),1,fpin );
printf( "ya suo lei xing %lu\n",objbmp.compression );
    num1 = fread( &objbmp.bmpdatasize,sizeof( unsigned long ),1,fpin );
printf( "ya suo tuxiang size %lu\n",objbmp.bmpdatasize );
    num1 = fread( &objbmp.hr,sizeof( unsigned long ),1,fpin );
printf( "shuipingxiangsu %lu\n",objbmp.hr );
    num1 = fread( &objbmp.vr,sizeof( unsigned long ),1,fpin );
printf( "chuizhixiangxu %lu\n",objbmp.vr );
    num1 = fread( &objbmp.color,sizeof( unsigned long ),1,fpin );
printf( "color %lu\n",objbmp.color );
    num1 = fread( &objbmp.impcolor,sizeof( unsigned long ),1,fpin );
printf( "impcolor %lu\n",objbmp.impcolor );
    int a=0,b=0,c=0,d=0;
while(1)
{
    num1 = fread( &a,sizeof( char ),1,fpin );    
    num1 = fread( &b,sizeof( char ),1,fpin );
    num1 = fread( &c,sizeof( char ),1,fpin );
    num1 = fread( &d,sizeof( char ),1,fpin );

printf( "%d,%d,%d,%d\n",a,b,c,d );
}


}


但是到了真正要读取数据的地方  输出就不对了 我的图片的第一个像素是纯白色  rgb 255.255.255 第4个字节对其应该为0  但是我读出来的第4个为255 我翻阅了bmp文件格式  一讲到数据段就没了。。。。谁能补充一下 不生感激

论坛徽章:
0
4 [报告]
发表于 2008-02-19 23:59 |只看该作者
用GD库比较简单一些吧。干嘛要自己解析文件格式?

论坛徽章:
0
5 [报告]
发表于 2008-02-20 10:00 |只看该作者
请问那里有GD库
我是新手 烦劳相告

论坛徽章:
0
6 [报告]
发表于 2008-02-20 11:30 |只看该作者
在framebuffer下看图的话,用SDL来开发比较简单,显示bmp的库有现成的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP