function(canvasNuit, canvasJour: TCanvas; AWidth, AHeight, ATransparency: integer): TBitmap; var bf: BLENDFUNCTION; begin Result := TBitmap.Create; Result.Width := AWidth; Result.Height := AHeight; BitBlt(Result.Canvas, 0, 0, AWidth, AHeight, canvasNuit, 0, 0, SRCCPY); bf.BlendOp := AC_SRC_OVER; bf.BlendFlags := 0; bf.SourceConstantAlpha := ATransparency; bf.AlphaFormat := 0; AlphaBlend(Result.Canvas, 0, 0, AWidth, AHeight, canvasJour, 0, 0, AWidth, AHeight, bf); end;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question// Both bitmaps must be equal size and 32 bit format. procedure MergeTransparent(dstBitmap, srcBitmap: TBitmap; Transparency: Integer); var dstPixel, srcPixel: PRGBQuad; InvertTransparency: Integer; bmpWidth, bmpHeight: Integer; x, y: Integer; begin bmpWidth := srcBitmap.Width; bmpHeight := srcBitmap.Height; InvertTransparency := 100 - Transparency; for y := 0 to bmpHeight - 1 do begin srcPixel := srcBitmap.ScanLine[y]; dstPixel := dstBitmap.ScanLine[y]; for x := 0 to bmpWidth - 1 do begin dstPixel^.rgbRed := ((InvertTransparency * dstPixel^.rgbRed) + (Transparency * srcPixel^.rgbRed)) div 100; dstPixel^.rgbGreen := ((InvertTransparency * dstPixel^.rgbGreen) + (Transparency * srcPixel^.rgbGreen)) div 100; dstPixel^.rgbBlue := ((InvertTransparency * dstPixel^.rgbBlue) + (Transparency * srcPixel^.rgbBlue)) div 100; Inc(srcPixel); Inc(dstPixel); end; end; end;