自定义平移函数应用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;
	}