public static void Negative(this IMatrixImage image) { using (image.SupressUpdating()) // Подавление обновлений при редактировании слоев { foreach (var item in image.Split(false)) // Для каждого слоя без копирования { item.Sub(256, false); // Вычитание каждого пикселя (256 - значение пикселя) } } }
public override IMatrixImage Invoke(IMatrixImage input) { var layers = input.Split(false); if (layers.Length == 1) { return(input); } else { return(input.CreateSingleGray().CreateImage()); } }
public BitmapHandler(IMatrixImage matrixImage) : base(matrixImage) { MatrixLayer <byte>[] layers = matrixImage.Split(false).Select(a => a.ToByteLayer(false)).ToArray(); if (layers.Length == 1) { // GrayScale Bitmap = new Bitmap(matrixImage.Width, matrixImage.Height, PixelFormat.Format8bppIndexed); ColorPalette palette = Bitmap.Palette; Color[] ent = palette.Entries; for (int i = 0; i < 256; i++) { ent[i] = Color.FromArgb(i, i, i); // Настроить для Bitmap только цвета с оттенками серого } Bitmap.Palette = palette; Bitmap.FillGrayBitmap(layers[0]); matrixImage.Updated += (_, upd) => Bitmap.FillGrayBitmap(upd.Image.Split(false)[0]); } else if (layers.Length == 3) { // Bgr Bitmap = new Bitmap(matrixImage.Width, matrixImage.Height, PixelFormat.Format24bppRgb); Bitmap.FillBgrBitmap(matrixImage.Split(false)); matrixImage.Updated += (_, upd) => Bitmap.FillBgrBitmap(upd.Image.Split(false)); } else if (layers.Length == 4) { // Bgra Bitmap = new Bitmap(matrixImage.Width, matrixImage.Height, PixelFormat.Format32bppPArgb); Bitmap.FillBgraBitmap(matrixImage.Split(false)); matrixImage.Updated += (_, upd) => Bitmap.FillBgraBitmap(upd.Image.Split(false)); } else { throw new NotSupportedException(); } PartialCtor(matrixImage, layers); }
public static bool GetRemoveAlpha(this IMatrixImage image, out IMatrixImage?retImage) { if (image.LayerCount == 4) { IMatrixLayer[] layers = image.Split(false); retImage = MatrixImageBuilder.CreateImage(layers, true); return(true); } else { retImage = null; return(false); } }
public static void FillBitmap(this Bitmap bitmap, IMatrixImage image) { bitmap.FillBitmap(image.Split(false)); }