单色位图的联通性
来源:互联网 发布:windows清理助手官网 编辑:程序博客网 时间:2024/04/28 16:06
1、问题描述
读取一张单色位图,输出位图中有几个联通区域,每个联通区域的像素的个数。
如图像:
输出:
12
81
52
133
(输出顺序可能不一样)。
2、代码
/*+++++++++++++++++++++++++++++++++单色位图的联通性++author:zhouyong2013-5-1 14:56++++++++++++++++++++++++++++++++++++++++*/#include <stdio.h>#include <stdlib.h>#include <string.h>char *vis;char *pho;int width,height;int dx[]={-1,-1,-1,0,0,1,1,1};int dy[]={-1,0,1,-1,1,-1,0,1};void bfs(int x,int y,int &count);int main(){FILE *fp;char tmp;int count;fp=fopen("in.bmp","rb");fseek(fp,18,SEEK_CUR);fread(&width,4,1,fp);//偏移18字节,长度4字节,位图宽度fread(&height,4,1,fp);//偏移22字节,长度4字节,位图高度printf("width:%d height:%d \n",width,height);fseek(fp,0x3e,SEEK_SET);//二值图像数据的偏移pho=(char *)malloc(sizeof(char)*width*height);//存储图像的每一个像素点vis=(char *)malloc(sizeof(char)*width*height);memset(vis,0,sizeof(char)*width*height);int i,j,k;for(i=height-1;i>=0;i--){for(j=0;j<width/8;j++){fread(&tmp,1,1,fp);for(k=0;k<8;k++){if(tmp&(1<<(7-k)))pho[i*width+j*8+k]=1;elsepho[i*width+j*8+k]=0;}}}for(i=0;i<height;i++){for(j=0;j<width;j++){if(!vis[i*width+j]&&pho[i*width+j]==0){count=0;bfs(i,j,count);printf("%d \n",count);}}}fclose(fp);return 0;}void bfs(int x,int y,int &count){if(x>=0&&x<height&&y>=0&&y<width&&!vis[x*width+y]&&pho[x*width+y]==0){vis[x*width+y]=1;count++;for(int i=0;i<8;i++)//向8个领域延伸,找出联通区域的个数。bfs(x+dx[i],y+dy[i],count);}}
- 单色位图的联通性
- 单色位图的读取
- 获取单色位图指定坐标的数据
- 彩色位图与单色位图
- 实现透明位图时对单色位图与颜色位图转换的思考
- 有关单色位图创建和保存的问题,大家帮我看看,谢谢啦~
- Bitblt单色位图SetBkColor、SetTextColor作用网络版. 加自己的理解.
- Bitblt单色位图SetBkColor、SetTextColor作用
- Android 利用setpixels设置单色位图
- (转)Bitblt单色位图SetBkColor、SetTextColor作用
- Bitblt单色位图SetBkColor、SetTextColor作用
- Bitmap转为单色位图,打印电子签名
- 单色位图、颜色(色彩)位图相互转换
- 单色图的缩小
- 逻辑的联通性
- DIB(设备无关位图)旋转任意角度算法(单色位图)
- 维护图的联通性
- 完全自适应的单色或单线圆角框
- HDU 3062 Party (2-SAT入门学习)
- Ubuntu10.04 Git安装
- Arlicle
- 关于typedef的用法总结
- 康托尔、哥德尔、图灵——永恒的金色对角线
- 单色位图的联通性
- 一个不完全恢复的疑惑?
- LibGdx--DistanceJoint距离关节
- Struts2常用标签总结
- 【洛奇】系列2
- hadoop基本操作命令
- Attribute与Property的区别
- 链表相关函数
- ubuntu12.0.4 开机自动启动svn