809
社区成员
发帖
与我相关
我的任务
分享
void desktopui::Refresh(int ThreadIndex)
{
int x;
int y;
long gdiX,gdiY,gdiAddr;
long gdiXAddr,gdiYAddr;
long i,j;
long layerX,layerY;
long lbX,lbY,lbAddr;
long RYAddr,RXAddr;
float lwProportion,lhProportion;
PALETTEENTRY defColor,readColor,secondaryColor,colorA,colorB,colorC;
int zoomMode;
int nLOver;
int IsPix;
int InitRow;
InitRow = ThreadIndex;
for(y=InitRow;y<this->height;y=y+this->ThreadCount){
gdiY = y;
gdiYAddr = this->bytesWLength*gdiY;
RYAddr = gdiYAddr;
for(x=0;x<this->width;x++){
gdiX = x;
gdiXAddr = gdiX*4;
RXAddr = gdiXAddr;
gdiAddr = gdiXAddr+gdiYAddr;
secondaryColor.peBlue = this->Backs[gdiAddr];
secondaryColor.peGreen = this->Backs[gdiAddr+1];
secondaryColor.peRed = this->Backs[gdiAddr+2];
for(i=0;i<this->LayerLength;i++){
IsPix = 0;
if(gdiX>=this->Layers[i].left)
if(gdiX<(this->Layers[i].left+this->Layers[i].width))
if(gdiY>=this->Layers[i].top)
if(gdiY<(this->Layers[i].top+this->Layers[i].height)){
IsPix = 1;
}
if(IsPix==1){
lbX = gdiX-(this->Layers[i].left);
lbY = gdiY-(this->Layers[i].top);
lbAddr = (lbY*(this->Layers[i].img->wsize))+(lbX*4);
readColor.peBlue = this->Layers[i].img->bytes[lbAddr];
readColor.peGreen = this->Layers[i].img->bytes[lbAddr+1];
readColor.peRed = this->Layers[i].img->bytes[lbAddr+2];
readColor.peFlags = this->Layers[i].img->bytes[lbAddr+3];
if(i==0||readColor.peFlags==255){
secondaryColor.peBlue = readColor.peBlue;
secondaryColor.peGreen = readColor.peGreen;
secondaryColor.peRed = readColor.peRed;
}else{
secondaryColor.peBlue = secondaryColor.peBlue + Round(((float)(readColor.peBlue - secondaryColor.peBlue) / (float)255) * (float)readColor.peFlags);
secondaryColor.peGreen = secondaryColor.peGreen + Round(((float)(readColor.peGreen - secondaryColor.peGreen) / (float)255) * (float)readColor.peFlags);
secondaryColor.peRed = secondaryColor.peRed + Round(((float)(readColor.peRed - secondaryColor.peRed) / (float)255) * (float)readColor.peFlags);
}
}
}
this->bytes[RXAddr+RYAddr] = secondaryColor.peBlue;
this->bytes[RXAddr+RYAddr+1] = secondaryColor.peGreen;
this->bytes[RXAddr+RYAddr+2] = secondaryColor.peRed;
this->bytes[RXAddr+RYAddr+3] = 0x00;
}
}
SetBitmapBits(this->memBitmap,this->bytesLength,this->bytes);
}
Round(((float)(readColor.peBlue - secondaryColor.peBlue) / (float)255) * (float)readColor.peFlags);
避免浮点运算,这个可以改成先乘再整除的运算。