Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Графика, звук, анимация, игры > GDI+ и ранжированная прозрачность (Alpha)


Автор: Shaggy 11.10.07, 18:58
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Var
      Matrix:TColorMatrix =
       ((1.0, 0.0, 0.0, 0.0, 0.0),
        (0.0, 1.0, 0.0, 0.0, 0.0),
        (0.0, 0.0, 1.0, 0.0, 0.0),
        (0.0, 0.0, 0.0, 0.4, 0.0),
        (0.0, 0.0, 0.0, 0.0, 1.0));
     
    Procedure AlphaDraw(AFrom,AAlpha,ATo:TBitmap;AWidth,AHeight,APercent:Integer);
    Var
      Graphics:GPGraphics;
      Bitmap:GPBitmap;
      Attributes:GPImageAttributes;
    Begin
      Matrix[3,3]:=APercent/100;
      GdipCreateFromHDC(ATo.Canvas.Handle,Graphics);
      GdipCreateBitmapFromHBITMAP(AFrom.Handle,AFrom.Palette,Bitmap);
      GdipDrawImageRectI(Graphics,Bitmap,0,0,AWidth,AHeight);
      GdipDisposeImage(Bitmap);
      GdipCreateBitmapFromHBITMAP(AAlpha.Handle,AAlpha.Palette,Bitmap);
      GdipCreateImageAttributes(Attributes);
      GdipSetImageAttributesColorMatrix(Attributes,ColorAdjustTypeBitmap,True,@Matrix,Nil,ColorMatrixFlagsDefault);
      GdipDrawImageRectRect(Graphics,Bitmap,0,0,AWidth,AHeight,0,0,AWidth,AHeight,UnitPixel,Attributes,Nil,Nil);
      GdipDisposeImageAttributes(Attributes);
      GdipDisposeImage(Bitmap);
      GdipDeleteGraphics(Graphics);
    End;

Пример:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Image3.Canvas.FillRect(Image3.ClientRect); // Image3 не должен быть пустым
    AlphaDraw(Image1.Picture.Bitmap,Image2.Picture.Bitmap,Image3.Picture.Bitmap,128,128,50);

Результат:
в Image3 будет скопирован Image1, а поверх него с 50% прозрачностью Image2

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)