public unsafe static void ShowTransformedImage(WriteableBitmap image, TransformStrategy transformStrategy, Spectrum spectrum) { List <List <List <Complex> > > transform = TransformImage(image, transformStrategy); SwapQuadrants(transform); ShowSpectrum(image, transform, spectrum); }
public unsafe static void ShowFilterEffect(WriteableBitmap image, TransformStrategy transformStrategy, Filter filter) { List <List <List <Complex> > > transform = TransformImage(image, transformStrategy); SwapQuadrants(transform); transform.ForEach(x => filter.ApplyFilter(x)); SwapQuadrants(transform); ReverseTransform(transform, transformStrategy); SwapImage(image, transform); }
private unsafe static List <List <List <Complex> > > TransformImage(WriteableBitmap image, TransformStrategy transformStrategy) { image.Lock(); byte *imagePointer = (byte *)image.BackBuffer; int stride = image.BackBufferStride; List <List <List <Complex> > > transformedImage = new List <List <List <Complex> > >(); for (int c = 0; c < ImageConstants.numberOfColors; c++) { List <List <Complex> > colorPlane = new List <List <Complex> >(); for (int i = 0; i < image.PixelHeight; i++) { List <Complex> row = new List <Complex>(); for (int j = 0; j < image.PixelWidth; j++) { int index = i * stride + j * ImageConstants.bytesPerPixel + c; row.Add(new Complex(imagePointer[index], 0)); } colorPlane.Add(transformStrategy.TransformSignal(row)); } transformedImage.Add(colorPlane); } for (int c = 0; c < ImageConstants.numberOfColors; c++) { List <List <Complex> > colorPlane = transformedImage[c]; for (int i = 0; i < image.PixelWidth; i++) { List <Complex> column = Enumerable.Range(0, colorPlane.Count).Select(x => colorPlane[x][i]).ToList(); List <Complex> transformedColumn = transformStrategy.TransformSignal(column); for (int j = 0; j < colorPlane.Count; j++) { colorPlane[j][i] = transformedColumn[j]; } } } image.Unlock(); return(transformedImage); }
private unsafe static void ReverseTransform(List <List <List <Complex> > > transform, TransformStrategy transformStrategy) { for (int c = 0; c < ImageConstants.numberOfColors; c++) { List <List <Complex> > colorPlane = transform[c]; for (int i = 0; i < colorPlane.Count; i++) { colorPlane[i] = transformStrategy.ReverseSignalTransform(colorPlane[i]); } for (int i = 0; i < colorPlane[0].Count; i++) { List <Complex> column = Enumerable.Range(0, colorPlane.Count).Select(x => colorPlane[x][i]).ToList(); List <Complex> transformedColumn = transformStrategy.ReverseSignalTransform(column); for (int j = 0; j < colorPlane.Count; j++) { colorPlane[j][i] = transformedColumn[j]; } } } }