自定义平移函数应用CImage类实现
自定义平移函数使用CImage类实现
// 自定义平移函数,供调用 lilizong@gmail.com lilizong-copyright-2012-8-5 bool CDIGTLSView::myTransform( int x, int y) { //return false; if(myImage1.IsNull()) OnOpenResourceFile(); if(myImage2.IsNull()){ //myImage2.Destroy(); myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0); } COLORREF pixel; int maxY = myImage1.GetHeight(); int maxX=myImage1.GetWidth(); int r,g,b,avg; double c; byte* pRealData; byte* pRealData2; pRealData=(byte*)myImage1.GetBits(); pRealData2=(byte*)myImage2.GetBits(); int pit=myImage1.GetPitch(); int pit2=myImage2.GetPitch(); //需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现 //CString str; //str.Format(TEXT("%d"),pit); //MessageBox(str); //str.Format(TEXT("%d"),pit2); //MessageBox(str); int bitCount=myImage1.GetBPP()/8; int bitCount2=myImage2.GetBPP()/8; //CString str; //str.Format(TEXT("%d"),bitCount); //MessageBox(str); //str.Format(TEXT("%d"),bitCount2); //MessageBox(str); int newValue; int tempR,tempG,tempB; int key1,key2; //用来控制方向 //srand((unsigned)time(NULL)); //key1=rand()%100; //key2=rand()%100; //if(key1>50) // key1=-1; //else // key1=1; //if(key2<50) // key2=1; //else // key2=-1; //int xTrans=key1*rand()%(int)(maxX/1.5)+1; //int yTrans=key2*rand()%(int)(maxY/1.5)+1; int xTrans=x; int yTrans=y; //说明:将生产的图像作为24位图处理。 for (int y=0; y<maxY; y++) { for (int x=0; x<maxX; x++) { if((y-yTrans>=0)&&(y-yTrans+2<=maxY)&&(x-xTrans>=0)&&(x-xTrans+2<=maxX)) { tempR=(int)(int)(*(pRealData+pit*(y-yTrans)+(x-xTrans)*bitCount)); if(bitCount==1) {tempG=tempR; tempB=tempR;} else { tempG=(int)(int)(*(pRealData+pit*(y-yTrans)+(x-xTrans)*bitCount+1)); tempB=(int)(int)(*(pRealData+pit*(y-yTrans)+(x-xTrans)*bitCount+2)); } } else { tempR=255; tempG=0; tempB=0; } *(pRealData2+pit2*y+x*bitCount2)=tempR; *(pRealData2+pit2*y+x*bitCount2+1)=tempG; *(pRealData2+pit2*y+x*bitCount2+2)=tempB; } } Invalidate(); return true; }