void TAlpha::Process_Plus(HDC hdc, int X, int Y, int Width, int Height, typeprocess_plus_op_fun_ptr op_fun_ptr, void *funPara)
{
Process_PlusPara pluspara;
AlphaPara para;
para.X = X;
para.Y = Y;
para.Width = Width;
para.Height = Height;
pluspara.fptr = op_fun_ptr;
pluspara.para = funPara;
para.AdditionalPara = (void *)&pluspara;
Process(hdc, ¶, Process_Plus, 2);
}
void _alpha__fastcall_pre_ TAlpha::Process_Plus(AlphaPara *Para)
{
typeprocess_plus_op_fun_ptr fptr = ((Process_PlusPara *)Para->AdditionalPara)->fptr;
void *para = ((Process_PlusPara *)Para->AdditionalPara)->para;
int width;
int height;
int height_1 = (height = Para->Height) - 1;
int iPixelAdd;
int ld = (iPixelAdd = Para->PixelAdd + 3) * (width = Para->Width) + Para->LineAdd;
byte *ptrbuffer = Para->ptrBuffer;
if (Para->PixelAdd == 1)
{
for (register int i = height_1; i >= 0; )
{
register byte *ptrDest = ptrbuffer + ld * i;
register int j = 0;
do
{
fptr(*(ptrDest + 2), *(ptrDest + 1), *ptrDest, *(ptrDest + 3), j, height_1 - i, width, height, para);
j++;
ptrDest += iPixelAdd;
}while(j < width);
i--;
}
}
else
{
for (register int i = height_1; i >= 0; )
{
register byte *ptrDest = ptrbuffer + ld * i;
register int j = 0;
do
{
fptr(*(ptrDest + 2), *(ptrDest + 1), *ptrDest, 255, j, height_1 - i, width, height, para);
j++;
ptrDest += iPixelAdd;
}while(j < width);
i--;
}
}
}