private void DrawNoise(float opacity) { if (_noiseImageRef == null) { const int width = 124; const int height = width; const int size = width * height; var rgba = new byte[size]; var random = new Random(120); for (var i = 0; i < size; i++) { rgba[i] = (byte)(random.Next() % 256); } var colorSpace = CGColorSpace.CreateDeviceGray(); var bitmapContext = new CGBitmapContext(rgba, width, height, 8, width, colorSpace, CGImageAlphaInfo.None); _noiseImageRef = bitmapContext.ToImage(); } var context = NSGraphicsContext.CurrentContext.GraphicsPort; NSGraphicsContext.CurrentContext.SaveGraphicsState(); context.SetAlpha(opacity); context.SetBlendMode(CGBlendMode.Screen); var scaleFactor = Window.BackingScaleFactor; context.ScaleCTM(1f / scaleFactor, 1f / scaleFactor); var imageRect = new RectangleF(PointF.Empty, new SizeF(_noiseImageRef.Width, _noiseImageRef.Height)); context.DrawTiledImage(imageRect, _noiseImageRef); NSGraphicsContext.CurrentContext.RestoreGraphicsState(); }