private void _CreateFireGenerator() { lock (_fireGenLock) { BitmapSource image = Source; if (image == null) { _fireGenerator = null; return; } int imageSize = image.PixelWidth * image.PixelHeight; int stride = image.PixelWidth * 4; _fireGenerator = new FireGenerator(image.PixelWidth, image.PixelHeight); byte[] baseImage = new byte[stride * image.PixelHeight]; image.CopyPixels(baseImage, stride, 0); for (int i = 0; i < imageSize; i++) { _fireGenerator.BaseAlphaChannel[i] = baseImage[i * 4 + 3]; } } }