0
点赞
收藏
分享

微信扫一扫

自定义平移函数使用CImage类实现


// 自定义平移函数,供调用   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;
}






举报

相关推荐

0 条评论