BCB代码转C或C#
刚刚开始学windows程序设计。
代码如下,希望有高手能帮忙解决。
BLENDFUNCTION blend ;
TPoint P ;
TSize S ;
int X, Y;
Graphics::TBitmap *TempBmpRGBA ;
byte Alpha ;
PRGBQuad Linia32 ;
PRGBQuad Linia32RGBA ;
Graphics::TBitmap *bmpRGBA = Form1->Image1->Picture->Bitmap;
try
{
TempBmpRGBA = new Graphics::TBitmap();
try
{
TempBmpRGBA->Width = bmpRGBA->Width;
TempBmpRGBA->Height = bmpRGBA->Height;
TempBmpRGBA->PixelFormat = pf32bit;
for( Y = 0 ;Y<TempBmpRGBA->Height;Y++)
{
Linia32RGBA = (PRGBQuad)bmpRGBA->ScanLine[Y];
Linia32 = (PRGBQuad)TempBmpRGBA->ScanLine[Y];
for( X = 0;X<TempBmpRGBA->Width;X++)
{
if( PtInRegion(Region, X, Y))
{
Alpha = 0;
}
else
{
Alpha = Linia32RGBA->rgbReserved;
}
Linia32->rgbRed = MulDiv(Linia32RGBA->rgbRed, Alpha, 255);
Linia32->rgbGreen = MulDiv(Linia32RGBA->rgbGreen, Alpha, 255);
Linia32->rgbBlue = MulDiv(Linia32RGBA->rgbBlue, Alpha, 255);
Linia32->rgbReserved = Alpha;
Linia32++;
Linia32RGBA++;
}
}
P = Point(0, 0);
S.cx = bmpRGBA->Width;
S.cy = bmpRGBA->Height;
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.AlphaFormat = AC_SRC_ALPHA;
blend.SourceConstantAlpha = 255;
UpdateLayeredWindow(Hnd, GetDC(0), NULL, &S,
TempBmpRGBA->Canvas->Handle, &P, 0,
&blend, ULW_ALPHA);
}__finally
{
delete TempBmpRGBA;
TempBmpRGBA = NULL;
}
}__finally
{
}