标题:求单色位图上圆的圆心坐标,写了几天了,执行时出错,请各位大大进来帮忙调 ...
取消只看楼主
晴天一阵
Rank: 2
等 级:论坛游民
帖 子:40
专家分:24
注 册:2011-5-21
结帖率:91.67%
已结贴  问题点数:50 回复次数:3 
求单色位图上圆的圆心坐标,写了几天了,执行时出错,请各位大大进来帮忙调试看看
问题描述:求单色位图(bmp格式)上圆的圆心坐标,关于位图的部分相关资料以及1.bmp位图文件在附件里面。
生成解决方案不会报错,执行时会报错,程序连续写了好几天了,第一次试水,不想打击信心,
请各位大大一定帮忙调试,先谢过了,(50分~
[local]1[/local]
#include
#include
#include
#include
#include
using namespace std;
const int sum=100;
int Pixel(int a,int b,int tpixel);
typedef struct tagitem
{
    int leftx;         //当前坐标靠左边点的x轴坐标
    int rightx;        //当前坐标靠右边点的x轴坐标
    int bottomy;       //当前坐标靠下面点y轴坐标
    int topy;          //当前坐标靠上面的点x轴坐标
    int topxstatic;    //用于保存上一个点的x轴
    int topystatic;    //用于保存上一个点的y轴
}item;
int main()
{
    int bmpw;//图像宽度
    int bmph;//图像高度
    FILE *fp;
    fp=fopen("1.bmp","rb");
    fseek(fp,18L,0);
    fread(&bmpw,sizeof(int),1,fp);
    fread(&bmph,sizeof(int),1,fp);
//cout<<BMPW<<"\N";
//cout<<BMPH<<"\N";

    item myitem[sum];//用于保存N个圆的最上(下左右)点的坐标
    int i=0,j=0,k=0,z=0;
    int pixel,temppixel;
    int *toppixel=0,*leftpixel=0,*topleftpixel=0,*toprightpixel=0;
    for(i=0;i<BMPH;I++) 扫描
    {
        for(j=0;j<BMPW;J++)
        {
            int t=54+int((i-1)*bmpw+j)/8;//计算需要指向的第几个字节
            
            fseek(fp,t,0);//查找
            fread(&temppixel,1,1,fp);//读出
            pixel=Pixel(i,j,temppixel);//计算这个点的值(1或0)
            if(pixel=1)//判断是否是白点
            {
                fseek(fp,(54+int((i-1)*bmpw+j-1)/8),t);//分别算出当前坐标的上、左、左上、右上的值(1或者0)
                fread(&temppixel,1,1,fp);
                *leftpixel=Pixel(i,j-1,temppixel);

                fseek(fp,(54+int((i-2)*bmpw+j)/8),t);
                fread(&temppixel,1,1,fp);
                *toppixel=Pixel(i-1,j,temppixel);

                fseek(fp,(54+int((i-2)*bmpw+j-1)/8),t);
                fread(&temppixel,1,1,fp);
                *topleftpixel=Pixel(i-1,j-1,temppixel);

                fseek(fp,(54+int((i-2)*bmpw+j+1)/8),t);
                fread(&temppixel,1,1,fp);
                *toprightpixel=Pixel(i-1,j+1,temppixel);
            
                    if((*toppixel=1)||(*leftpixel=1)||(*topleftpixel=1)||(*toprightpixel=1))//判断是否是连通域
                    {
                        if(*leftpixel=0)//判断左点是不是白或黑
                            for(int n=0;n<K;N++) 如果为黑,此点则为另一个已经被扫描出来的集合的点,搜索出此集合
                            {
                                if(((j=myitem[n].topxstatic-1)||(j=myitem[n].topxstatic+1))&&(i=myitem[n].topystatic+1))
                                    {
                                        myitem[n].topystatic=i;
                                        myitem[n].topxstatic=j;
                                        z=n;
                                    }

                            }
   
                        if(myitem[z].bottomy>i)//即时变动圆最上下左右点的值
                            myitem[z].bottomy=i;
                        if(myitem[z].leftx>j)
                            myitem[z].leftx=j;
                        if(myitem[z].rightx<J)
                            myitem[z].rightx=j;
                        if(myitem[z].topy<I)
                            myitem[z].topy=i;
                    }
                    else //新建并初始化一个圆
                    k++;
                    z=k;
                    myitem[k].topxstatic=j;
                    myitem[k].topystatic=i;
                    myitem[k].bottomy=i;
                    myitem[k].leftx=j;
                    myitem[k].topy=i;
                    myitem[k].rightx=j;
            }
            
        }
    }
    for(int n=0;n<K;N++)
    {
        cout<<"第"<<N<<"个圆的圆心坐标为:";
        cout<<"("<<(myitem[n].leftx+myitem[n].rightx)/2<<","<<(myitem[n].bottomy+myitem[n].topy)/2<<")"<<ENDL;
    }
    fclose(fp);
    return 0;
}
int Pixel(int a,int b,int tpixel)//求坐标点的值的函数
{
    int pi,f;
    pi=tpixel&(f=1)<<((a*b%8)-1);
    if(pi!=0)
        return 1;
    else
        return 0;
}
搜索更多相关主题的帖子: 50分 解决方案 include 
2011-10-31 22:50
晴天一阵
Rank: 2
等 级:论坛游民
帖 子:40
专家分:24
注 册:2011-5-21
得分:0 
附件.rar (73.53 KB)
2011-10-31 22:51
晴天一阵
Rank: 2
等 级:论坛游民
帖 子:40
专家分:24
注 册:2011-5-21
得分:0 
程序.rar (1.27 KB)
上面的头文件没有显示,现发个源程序,希望高手帮忙调试
2011-11-01 22:40
晴天一阵
Rank: 2
等 级:论坛游民
帖 子:40
专家分:24
注 册:2011-5-21
得分:0 
顶上
2011-11-03 18:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-353944-1-1.html




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

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