| 发表于:2007-01-15 15:54:241楼 得分:0 |
原代码为: ---------------------- cfile sf; long hin = 0; sf.open( "e:\\captmp.bmp ",cfile::moderead); sf.seek(10,cfile::begin); sf.read(&hin,sizeof(int)); sf.seek(hin,cfile::begin); unsigned char *pmb = (unsigned char *)malloc(sf.getlength() - hin); memset(pmb,0,sizeof(unsigned char) * sf.getlength() - hin); sf.read(pmb,sf.getlength() - hin); unsigned char ds = 0x0; long m,pmblen = sf.getlength() - hin; //-----------求最亮点------------------ for ( m = 0; m < pmblen; m++ ) { byte c,r,g,b; c=(pmb[m] < <8)+pmb[m+1]; r=(c&0x7c00)> > 10; g=(c&0x03e0)> > 5; b=c&0x001f; ds=max(ds,max(max(r,g),b)); } sf.seek(10,cfile::begin); sf.read(&hin,sizeof(int)); int gw,gh; sf.seek(4,cfile::current); sf.read(&gw,sizeof(int)); sf.read(&gh,sizeof(int)); sf.seek(hin,cfile::begin); int x = gw , y = gh , bufsize; int isscrx = 0 , isscry = 0; bool xf,yf; unsigned char *pb; xf = yf = false; bufsize = sizeof(unsigned char) * gw * 3; pb = (unsigned char *)malloc(bufsize); while ( y != 0 ) { memset(pb,0,bufsize); sf.read(pb,bufsize); for ( int j = 0; j < bufsize; j += 3 ) { if ( pb[j] == ds ¦ ¦ pb[j + 1] == ds ¦ ¦ pb[j + 2] == ds ) { x = (j + 1) / 3; xf = true; break; } } if ( xf == true ) { yf = true; break; } y -= 1; } if (xf == true && yf == true) { isscrx = (int)(x * 2.5); isscry = (int)(y * 2.5); } free(pb); free(pmb); sf.close(); --------------------------- 求出的isscrx ,isscry 为此亮点在图片中的位置。 可是算出来的结果不对。 ------------------------- 后来我改成: for ( m = 0; m < pmblen; m++ ) { ds = (pmb[m] > ds ? pmb[m] : ds); } 结果也不对。高手请指点指点. | | |
|