Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 |