public static unsafe MatrixFrame.Pixel[,] BitmapToPixelArray(Bitmap bitmap) { BitmapData imageData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb); MatrixFrame.Pixel[,] frame = new MatrixFrame.Pixel[bitmap.Width, bitmap.Height]; byte *scan0 = (byte *)imageData.Scan0.ToPointer(); int stride = imageData.Stride; byte *row; for (int y = 0; y < imageData.Height; y++) { row = scan0 + (y * stride); for (int x = 0; x < imageData.Width; x++) { int index = x * 3; frame[x, y].R = row[index + 2]; frame[x, y].G = row[index + 1]; frame[x, y].B = row[index]; } } bitmap.UnlockBits(imageData); bitmap.Dispose(); return(frame); }
private void SA_SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs <System.Windows.Media.Color?> e) { if (frame != null) { MatrixFrame.Pixel color1 = new MatrixFrame.Pixel(SAColor1.SelectedColor.Value.R, SAColor1.SelectedColor.Value.G, SAColor1.SelectedColor.Value.B); MatrixFrame.Pixel color2 = new MatrixFrame.Pixel(SAColor2.SelectedColor.Value.R, SAColor2.SelectedColor.Value.G, SAColor2.SelectedColor.Value.B); frame.SetSpectrumGradient(color1, color2); } }