private async Task PrintBitmap(Bitmap bimg, bool dither = true) { if (dither) { logger.Trace("Dithering input bitmap"); bimg = Grayscale.CommonAlgorithms.Y.Apply(bimg); OrderedDithering f = new OrderedDithering(bayer4); bimg = f.Apply(bimg); logger.Debug("Dithered Bitmap"); } bimg = CopyToBpp(bimg); logger.Debug("Converted Bitmap to 1-bit"); int hSzImg = bimg.Height; byte[] iimg = new byte[hSzImg * mmj.Printer.LineWidth]; byte[] img; using (MemoryStream s = new MemoryStream()) { bimg.Save(s, ImageFormat.Bmp); img = s.ToArray(); } logger.Debug("Got bitmap's bytes"); bimg.Dispose(); logger.Debug("Disposed of Bitmap"); int startoffset = img.Length - (hSzImg * mmj.Printer.LineWidth); logger.Debug("Processing bytes with offset " + startoffset); for (int h = 0; h < hSzImg; h++) { for (int w = 0; w < mmj.Printer.LineWidth; w++) { iimg[(mmj.Printer.LineWidth * (hSzImg - 1 - h)) + (mmj.Printer.LineWidth - 1 - w)] = (byte)~ img[startoffset + (mmj.Printer.LineWidth * h) + (mmj.Printer.LineWidth - 1 - w)]; } } logger.Debug($"Have {img.Length} bytes of print data ({mmj.Printer.LineWidth * 8}x{hSzImg}@1bpp)"); await mmj.PrintBytesAsync(iimg, false); }
public static Bitmap FilterImage(Bitmap img, int filter) { Bitmap sourceImage = img; sourceImage = ImageUtil.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format32bppArgb); IFilter myFilter; Bitmap filteredImage = sourceImage; if (filter == Filters.filters["Greyscale"]) { sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); filteredImage = sourceImage; } else if (filter == Filters.filters["Sepia"]) { myFilter = new Sepia(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Invert"]) { sourceImage = ImageUtil.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format24bppRgb); myFilter = new Invert(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["RotateChannel"]) { myFilter = new RotateChannels(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Threshold"]) { sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new Threshold(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["FloydFilter"]) { FloydSteinbergColorDithering myReduction = new FloydSteinbergColorDithering(); filteredImage = myReduction.Apply(sourceImage); } else if (filter == Filters.filters["OrderedDithering"]) { sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new OrderedDithering(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Sharpen"]) { myFilter = new Sharpen(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["DifferenceEdgeDetector"]) { sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new DifferenceEdgeDetector(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["HomogenityEdgeDetector"]) { sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new HomogenityEdgeDetector(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Sobel"]) { sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new SobelEdgeDetector(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Jitter"]) { myFilter = new Jitter(); //Needs Expand filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["OilPainting"]) { sourceImage = ImageUtil.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format24bppRgb); myFilter = new OilPainting(); //Needs Expand filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["TextureFiltering"]) { sourceImage = ImageUtil.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format24bppRgb); myFilter = new Texturer(new TextileTexture(), 1.0, 0.8); //Needs Expand filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Median"]) { sourceImage = ImageUtil.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format24bppRgb); myFilter = new Median(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Mean"]) { myFilter = new Mean(); filteredImage = myFilter.Apply(sourceImage); } else if (filter == Filters.filters["Blur"]) { myFilter = new GaussianBlur(); filteredImage = myFilter.Apply(sourceImage); } //Console.Write(filteredImage.PixelFormat.ToString()); //Console.Write(sourceImage.PixelFormat.ToString()); filteredImage = ImageUtil.convert(filteredImage, System.Drawing.Imaging.PixelFormat.Format32bppArgb); return(filteredImage); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object can be used to retrieve data from input parameters and /// to store data in output parameters.</param> protected override void SolveInstance(IGH_DataAccess DA) { Bitmap sourceImage = null; DA.GetData(0, ref sourceImage); string filter = ""; DA.GetData(1, ref filter); sourceImage = ImageUtilities.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format32bppArgb); IFilter myFilter; Bitmap filteredImage = sourceImage; //Grayscale.CommonAlgorithms.Y.Apply switch (filter) { case "Greyscale": Console.Write("Applying: " + filter); sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); filteredImage = sourceImage; break; case "Sepia": Console.Write("Applying: " + filter); myFilter = new Sepia(); filteredImage = myFilter.Apply(sourceImage); break; case "Invert": Console.Write("Applying: " + filter); sourceImage = ImageUtilities.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format24bppRgb); myFilter = new Invert(); filteredImage = myFilter.Apply(sourceImage); break; case "RotateChannel": Console.Write("Applying: " + filter); myFilter = new RotateChannels(); filteredImage = myFilter.Apply(sourceImage); break; case "Threshold": //Need Extended Version Console.Write("Applying: " + filter); sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new Threshold(); filteredImage = myFilter.Apply(sourceImage); break; case "FloydFilter": Console.Write("Applying: " + filter); //sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); //myFilter = new FloydSteinbergColorDithering(); FloydSteinbergColorDithering myReduction = new FloydSteinbergColorDithering(); filteredImage = myReduction.Apply(sourceImage); //filteredImage = myFilter.Apply(sourceImage); break; case "OrderedDithering": Console.Write("Applying: " + filter); sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new OrderedDithering(); filteredImage = myFilter.Apply(sourceImage); break; case "Sharpen": Console.Write("Applying: " + filter); myFilter = new Sharpen(); filteredImage = myFilter.Apply(sourceImage); break; case "DifferenceEdgeDetector": Console.Write("Applying: " + filter); sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new DifferenceEdgeDetector(); filteredImage = myFilter.Apply(sourceImage); break; case "HomogenityEdgeDetector": Console.Write("Applying: " + filter); sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new HomogenityEdgeDetector(); filteredImage = myFilter.Apply(sourceImage); break; case "Sobel": Console.Write("Applying: " + filter); sourceImage = Grayscale.CommonAlgorithms.RMY.Apply(sourceImage); myFilter = new SobelEdgeDetector(); filteredImage = myFilter.Apply(sourceImage); break; case "Jitter": Console.Write("Applying: " + filter); myFilter = new Jitter(); //Needs Expand filteredImage = myFilter.Apply(sourceImage); break; case "OilPainting": Console.Write("Applying: " + filter); myFilter = new OilPainting(); //Needs Expand filteredImage = myFilter.Apply(sourceImage); break; case "TextureFiltering": Console.Write("Applying: " + filter); sourceImage = ImageUtilities.convert(sourceImage, System.Drawing.Imaging.PixelFormat.Format24bppRgb); myFilter = new Texturer(new TextileTexture(), 1.0, 0.8); //Needs Expand filteredImage = myFilter.Apply(sourceImage); break; case "Median": Console.Write("Applying: " + filter); myFilter = new Median(); filteredImage = myFilter.Apply(sourceImage); break; case "Mean": Console.Write("Applying: " + filter); myFilter = new Mean(); filteredImage = myFilter.Apply(sourceImage); break; case "Blur": //Need Extended Version Console.Write("Applying: " + filter); myFilter = new GaussianBlur(); filteredImage = myFilter.Apply(sourceImage); break; default: Console.Write("No Filter"); break; } Console.Write(filteredImage.PixelFormat.ToString()); Console.Write(sourceImage.PixelFormat.ToString()); filteredImage = ImageUtilities.convert(filteredImage, System.Drawing.Imaging.PixelFormat.Format32bppArgb); DA.SetData(0, filteredImage); }
private void video_NewFrame1(object sender, NewFrameEventArgs eventArgs) { videoCapture.Stop(); pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage; pictureBox2.SizeMode = PictureBoxSizeMode.CenterImage; pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone(); //pictureBox2.Image = (Bitmap)eventArgs.Frame.Clone(); image = (Bitmap)eventArgs.Frame.Clone(); byte[,] matrix = new byte[4, 4] { { 95, 233, 127, 255 }, { 159, 31, 191, 63 }, { 111, 239, 79, 207 }, { 175, 47, 143, 15 } }; switch (choice) { case 0: { } break; //Threshold case 1: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); Threshold filter = new Threshold(100); applyfilter(filter); } break; //OrderedDithering case 2: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); OrderedDithering filter = new OrderedDithering(matrix); applyfilter(filter); } break; //BayerDithering case 3: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); BayerDithering filter = new BayerDithering(); applyfilter(filter); } break; //floyd case 4: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); FloydSteinbergDithering filter = new FloydSteinbergDithering(); applyfilter(filter); } break; //burkes case 5: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); BurkesDithering filter = new BurkesDithering(); applyfilter(filter); } break; //jarvis case 6: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); JarvisJudiceNinkeDithering filter = new JarvisJudiceNinkeDithering(); applyfilter(filter); } break; //sierra case 7: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); SierraDithering filter = new SierraDithering(); applyfilter(filter); } break; //stucki case 8: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); StuckiDithering filter = new StuckiDithering(); applyfilter(filter); } break; //Homogenity case 9: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); HomogenityEdgeDetector filter = new HomogenityEdgeDetector(); applyfilter(filter); } break; //rotate case 10: { applyfilter(new RotateChannels()); } break; //sobel case 11: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); SobelEdgeDetector filter = new SobelEdgeDetector(); applyfilter(filter); } break; //canny case 12: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); CannyEdgeDetector filter = new CannyEdgeDetector(); applyfilter(filter); } break; case 13: { applyfilter(new YCbCrFiltering()); } break; case 14: { applyfilter(new HueModifier(180)); } break; //SIS Threshold case 15: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); SISThreshold filter = new SISThreshold(); applyfilter(filter); } break; //Difference case 16: { Grayscale g = new Grayscale(0.2125, 0.7154, 0.0721); image = g.Apply(image); DifferenceEdgeDetector filter = new DifferenceEdgeDetector(); applyfilter(filter); } break; //mirror case 17: { applyfilter(new Mirror(false, true)); } break; //flip case 18: { applyfilter(new RotateBilinear(180, true)); } break; //Erosion case 19: { applyfilter1(new Erosion()); } break; //Dilatation case 20: { applyfilter1(new Dilatation()); } break; //Opening case 21: { applyfilter1(new Opening()); } break; //closing case 22: { applyfilter1(new Closing()); } break; //jitter case 23: { applyfilter(new Jitter(15)); } break; //OilPainting case 24: { applyfilter(new OilPainting(10)); } break; //pixellate case 25: { applyfilter(new Pixellate(10)); } break; } }
public OrderedDitheringFilter() { orderedDithering = new OrderedDithering(); }
public static Bitmap ApplyFiliter(ImageFiliter imgFilter, Bitmap bmp, byte Value, byte Value2) { Bitmap newImage = null; //ContrastCorrection filter2 = new ContrastCorrection(1.0); //newImage = filter2.Apply(bmp); if (imgFilter != ImageFiliter.None) { IFilter filter3 = Grayscale.CommonAlgorithms.Y; newImage = filter3.Apply(bmp); if (imgFilter == ImageFiliter.Threshold) { IFilter filter = null; if (Value == 0) { filter = new Threshold(); } else { filter = new Threshold(Value); } newImage = filter.Apply(newImage); //IterativeThreshold filter = new IterativeThreshold(Value2, Value); //// apply the filter // newImage = filter.Apply(newImage); } if (imgFilter == ImageFiliter.ThresholdWithCarry) { IFilter filter = new ThresholdWithCarry(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.OrderedDithering) { IFilter filter = new OrderedDithering(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.BayerDithering) { IFilter filter = new BayerDithering(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.FloydSteinbergDithering) { IFilter filter = new FloydSteinbergDithering(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.BurkesDithering) { IFilter filter = new BurkesDithering(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.JarvisJudiceNinkeDithering) { IFilter filter = new JarvisJudiceNinkeDithering(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.SierraDithering) { IFilter filter = new SierraDithering(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.StuckiDithering) { IFilter filter = new StuckiDithering(); newImage = filter.Apply(newImage); } else if (imgFilter == ImageFiliter.Convolution) { // create filter //OtsuThreshold filter = new OtsuThreshold(); //// apply the filter //filter.ApplyInPlace(newImage); //// create filter //IterativeThreshold filter = new IterativeThreshold(0); //// apply the filter //newImage = filter.Apply(newImage); int[,] kernel = { { -2, -1, 0 }, { -1, 1, 1 }, { 0, 1, 2 } }; // create filter Convolution filter = new Convolution(kernel); // apply the filter filter.ApplyInPlace(newImage); } newImage = BitmapTo1Bpp(newImage); } else { newImage = BitmapTo1Bpp(bmp); } //轉換成 1bit bps return(newImage); }
public mDitherOrdered() { BitmapType = BitmapTypes.GrayscaleBT709; filter = new OrderedDithering(); }