使用WPF完成图像处理

分享于 

6分钟阅读

多媒体

  繁體
  • 下载EXE-214.36 KB
  • 下载ImageProcessing WPF解决方案-1.02 MB
  • 介绍

    scr1.jpg

    概述

    本文的目的是能够构建一个类,该类允许c#程序员执行图像处理功能。

    应用程序

    应用程序使用WPF,我使用一个CurrentImageHandler的单独类处理图像,其中所有与图像相关的操作都完成,包括保存,图形相关的操作,该功能包括获取图像信息,缩放,彩色滤镜,增亮,对比,灰度滤镜,反滤镜,以全分辨率调整大小,旋转和翻转,裁剪和插入文本,任何其他图像以及某些几何形状。图像相关的功能在一个ImageFunctions.dll的单独类库中处理。

    1.缩略图视图

    scr2.jpg

    ThumbnailViewWindow tvWnd = new ThumbnailViewWindow(currImgHandler);
    tvWnd.Show();

    2.颜色过滤器

    它非常简单-它只是对每种颜色加上或减去一个值,使用这个滤镜最有用的是将两个颜色设置为-255,以便去除它们,并看到图像的一个颜色分量,例如对于红色滤镜,保持红色分量不变,从绿色分量和蓝色分量中减去255.

    scr0.jpgscr3.jpg
    scr4.jpgscr5.jpg
    currImgHandler.CurrentFilterHandler.SetColorFilter(ColorFilterTypes.Red);
    currImgHandler.CurrentFilterHandler.SetColorFilter(ColorFilterTypes.Green);
    currImgHandler.CurrentFilterHandler.SetColorFilter(ColorFilterTypes.Blue);

    3.亮度

    只需根据用户需求调整颜色组件即可,输入范围在-255和255之间。

    scr0.jpgscr6.jpg
    BrightnessWindow bWnd = new BrightnessWindow();
    bWnd.BrightnessValue = 0;if (bWnd.ShowDialog().Value)
    {
     currImgHandler.CurrentBrightnessHandler.SetBrightness(bWnd.BrightnessValue);
     PaintImage();
    }

    4.对比

    scr0.jpgscr7.jpg
    ContrastWindow cFrm = new ContrastWindow();
    cFrm.ContrastValue = 0;if (cFrm.ShowDialog().Value)
    {
     currImgHandler.CurrentContrastHandler.SetContrast(cFrm.ContrastValue);
     PaintImage();
    }

    5.灰度

    灰度滤波是对特定图像的颜色模式参考,

    基本上,它是黑白图像,该图像中的颜色(如果有的话)将转换为相应的灰色阴影(黑白之间的中间色调),从而使图像的每一位仍然是可区分的。

    scr0.jpgscr8.jpg
    currImgHandler.CurrentGrayscaleHandler.SetGrayscale();

    6.褐色调

    深褐色滤镜有点类似于灰度。

    scr0.jpgscr9.jpg
    currImgHandler.CurrentSepiaToneHandler.SetSepiaTone();

    7.反相

    它只是接受当前组件的相反颜色,例如,如果颜色分量是00,那么我们得到的反相是FF (255-0 )。

    scr0.jpgscr10.jpg
    currImgHandler.CurrentInvHandler.SetInversion();

    8.插入文本,其他有更多功能的图像和形状

    这是由图像的Graphics对象实现的。

    scr0.jpgscr14.jpg
    scr12.jpgscr13.jpg
    //Inserting Text InsertImageWindow iiWnd = new InsertImageWindow();
    iiWnd.DisplayImagePositionX = iiWnd.DisplayImagePositionY = 0;
     if (iiWnd.ShowDialog().Value)
     {
     currImgHandler.CurrentImgInsHandler.Insert
     (iiWnd.DisplayImagePath, iiWnd.DisplayImagePositionX, 
     iiWnd.DisplayImagePositionY, iiWnd.DisplayImageWidth, 
     iiWnd.DisplayImageHeight, iiWnd.DisplayImageAngle, iiWnd.DisplayImageOpacity);
     PaintImage();
    }//Inserting ImagesInsertImageWindow iiWnd = new InsertImageWindow();
    iiWnd.DisplayImagePositionX = iiWnd.DisplayImagePositionY = 0;if (iiWnd.ShowDialog().Value)
    {
     currImgHandler.CurrentImgInsHandler.Insert
     (iiWnd.DisplayImagePath, iiWnd.DisplayImagePositionX, 
     iiWnd.DisplayImagePositionY, iiWnd.DisplayImageWidth, 
     iiWnd.DisplayImageHeight, iiWnd.DisplayImageAngle, iiWnd.DisplayImageOpacity);
     PaintImage();
    }//Inserting ShapesInsertShapeWindow isWnd = new InsertShapeWindow();
    isWnd.DisplayShapePositionX = isWnd.DisplayShapePositionY = 0;if (isWnd.ShowDialog().Value)
    {
     currImgHandler.CurrentShapeInsHandler.Insert
     (isWnd.DisplayShape, isWnd.DisplayShapePositionX, 
     isWnd.DisplayShapePositionY, isWnd.DisplayShapeWidth, 
     isWnd.DisplayShapeHeight, isWnd.DisplayShapeAngle, 
     isWnd.DisplayShapeOpacity, isWnd.DisplayShapeColor1, 
     isWnd.DisplayShapeColor2, isWnd.DisplayShapeGradientStyle);
     PaintImage();
    }

    PaintImage()方法

    privatevoid PaintImage()
    {
     System.IO.MemoryStream stream = new System.IO.MemoryStream();
     currImgHandler.CurrentBitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
     stream.Position = 0;
     byte[] data = new byte[stream.Length];
     stream.Read(data, 0, Convert.ToInt32(stream.Length));
     BitmapImage bmapImage = new BitmapImage();
     bmapImage.BeginInit();
     bmapImage.StreamSource = stream;
     bmapImage.EndInit();
     MainImage.Source = bmapImage;
     MainImage.Stretch = Stretch.Uniform;
    }

    图像  PROC  
    相关文章