厚積薄發(fā),豐富的公用類庫積累含鳞,助你高效進行系統開發(fā)(6)----全屏截圖影锈、圖標獲取、圖片打印蝉绷、頁面預覽截屏鸭廷、圖片復雜操作等

俗話說,一個好漢十個幫熔吗,眾人拾柴火焰高等都說明一個道理辆床,有更多的資源,更豐富的積累桅狠,都是助你走向成功讼载,走向頂峰的推動力。作為一個有多年開發(fā)經驗的技術人員或者是初級的編程菜鳥中跌,有著一些成熟咨堤、使用熟練的公用類庫,能很高程度提升自己的軟件開發(fā)能力和思維能力晒他。另外吱型,豐富的類庫也是.NET的各種知識點的匯聚逸贾,經常查看優(yōu)化陨仅,也是對自己能力深層次的提升津滞。本篇繼續(xù)公用類庫系列的介紹,不同于前面幾篇的主題灼伤,本篇主要介紹圖片相關方面的類庫操作触徐。
到目前為止,類庫的優(yōu)化及內容介紹狐赡、例子實現同步進行撞鹉,下面是最近的類庫幫助文檔整理截圖。


1颖侄、全屏截圖輔助控件 ScreenCaptureWindow

**實現效果 **
1)本輔助類主要是用來方便實現對屏幕進行局部截圖的功能鸟雏,類似QQ截圖的效果。



2)截圖的時候览祖,底圖是當前屏幕的圖像孝鹊,加了灰度背景,當鼠標單擊并拉動的時候展蒂,出現局部加亮區(qū)域又活,這個就是要截取的圖片內容。圖片截圖后锰悼,用戶可以實現自定義的保存等操作柳骄。

實現代碼
1)輔助類提供的方法接口如下所示:

/// <summary>    
/// 獲取或設置截圖的圖片對象    
/// </summary>    
public Bitmap BitmapCache    
   
/// <summary>    
/// 圖片截圖結束后的事件處理    
/// </summary>    
public event EventHandler BitmapCropped;    
   
/// <summary>    
/// 拖動截圖開始    
/// </summary>    
public Point DragStart    
   
/// <summary>    
/// 拖動截圖結束    
/// </summary>    
public Point DragStop  

2)輔助類ScreenCaptureWindow的使用例子代碼如下所示(增加圖片保存到文件的自定義操作)

public partial class Form1 : Form    
 {    
     private ScreenCaptureWindow captureWindow = null;    
   
     public Form1()    
     {    
         InitializeComponent();    
     }    
   
     private void captureWindow_BitmapCropped(object sender, EventArgs e)    
     {    
         if (captureWindow.DragStop != captureWindow.DragStart)    
         {    
             bool AutoSaveImages = false;    
             if (AutoSaveImages)    
             {    
                 string path = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);    
                 string fileName = "Snap_" + DateTime.Now.Ticks.ToString() + Guid.NewGuid().ToString().Substring(0, 2) + ".jpg";    
                 captureWindow.BitmapCache.Save(Path.Combine(path, fileName), ImageFormat.Jpeg);    
             }    
         }    
     }    
   
     private void btnScreenCapture_Click(object sender, EventArgs e)    
     {    
         if (captureWindow != null)    
         {    
             captureWindow.BitmapCropped -= new EventHandler(captureWindow_BitmapCropped);    
             captureWindow.Dispose();    
             captureWindow = null;    
         }    
         if (captureWindow == null)    
         {    
             captureWindow = new ScreenCaptureWindow();    
             captureWindow.BitmapCropped += new EventHandler(captureWindow_BitmapCropped);    
         }    
         captureWindow = new ScreenCaptureWindow();    
         captureWindow.Show();    
         captureWindow.TopMost = true;    
         captureWindow.TopMost = false;    
     }    
 }   

最簡化的操作就是只是把截圖的圖片放到在剪切板里面(默認),實現操作如下所示:

private ScreenCaptureWindow captureWindow = null;    
private void btnScreenCapture_Click(object sender, EventArgs e)    
{    
    captureWindow = new ScreenCaptureWindow();    
    captureWindow.Show();    
    captureWindow.TopMost = true;    
    captureWindow.TopMost = false;    
}  

2箕般、本輔助類主要是用來方便實現獲取文件耐薯、文件夾、擴展名的圖標信息

IconReaderHelper****丝里。

**實現效果 ** 1)本輔助類主要是用來方便實現窗體的各種動畫效果可柿,包括創(chuàng)建、關閉丙者、隱藏复斥、移動狀態(tài)的動畫,動畫支持滾動械媒、滑動目锭、各種方向變換、透明狀態(tài)等纷捞。


實現代碼
1)輔助類提供的方法接口如下所示

 /// <summary>   
/// 指定圖標尺寸大小選項    
/// </summary>    
public enum IconSize    
   
/// <summary>    
/// 指定文件夾是打開還是關閉狀態(tài)選項    
/// </summary>    
public enum FolderType    
   
/// <summary>    
/// 返回給定文件的圖標    
/// </summary>    
/// <param name="name">文件路徑名</param>    
/// <param name="size">大圖標還是小圖標</param>    
/// <param name="linkOverlay">是否包含鏈接圖標</param>    
/// <returns>System.Drawing.Icon</returns>    
public static Icon GetFileIcon(string name, IconSize size, bool linkOverlay)    
   
/// <summary>    
/// 用于訪問系統文件夾圖標痢虹。    
/// </summary>    
/// <param name="size">大圖標還是小圖標</param>    
/// <param name="folderType">文件夾是打開還是關閉狀態(tài)</param>    
/// <returns>System.Drawing.Icon</returns>    
public static Icon GetFolderIcon(IconSize size, FolderType folderType)    
   
/// <summary>    
/// 獲取文件或者文件夾圖標的顯示名稱    
/// </summary>    
/// <param name="name">文件或文件夾路徑</param>    
/// <param name="isDirectory">是否為文件夾</param>    
/// <returns></returns>    
public static string GetDisplayName(string name, bool isDirectory)   
  
  
#region 后綴名圖標操作    
   
/// <summary>    
/// 添加擴展名小圖標對象到ImageList集合中,并返回位置主儡;如果存在奖唯,則返回對應的位置。    
/// </summary>    
/// <param name="images"></param>    
/// <param name="extension"></param>    
/// <returns></returns>    
public static int GetIcon(ImageList images, string extension)    
   
/// <summary>    
/// 添加擴展名圖標對象到ImageList集合中糜值,并返回位置丰捷;如果存在坯墨,則返回對應的位置。    
/// </summary>    
/// <param name="images">ImageList集合</param>    
/// <param name="extension">擴展名</param>    
/// <param name="largeIcon">是否大圖標</param>    
/// <returns></returns>    
public static int GetIcon(ImageList images, string extension, bool largeIcon)    
   
/// <summary>    
/// 獲取擴展名的圖標    
/// </summary>    
/// <param name="extension">擴展名</param>    
/// <param name="large">是否為大圖標</param>    
/// <returns></returns>    
public static Icon ExtractIconForExtension(string extension, bool large)    
   
/// <summary>    
/// 獲取指定文件的關聯圖標    
/// </summary>    
/// <param name="stubPath">指定的文件路徑</param>    
/// <param name="large">是否為大圖標</param>    
/// <returns></returns>    
public static Icon GetAssociatedIcon(string stubPath, bool large)   
  
#endregion  

2)輔助類IconReaderHelper的使用例子代碼如下所示

private void btnGetIcon_Click(object sender, EventArgs e)    
{    
    if (!string.IsNullOrEmpty(this.txtFilPath.Text))    
    {    
        //獲取文件的圖標    
        Icon ico = IconReaderHelper.GetFileIcon(this.txtFilPath.Text,     
            IconReaderHelper.IconSize.Large, false);    
        this.pictureBox1.Image = Bitmap.FromHicon(ico.Handle);    
   
        //獲取對應圖標的說明名稱    
        string name = IconReaderHelper.GetDisplayName(this.txtFilPath.Text, false);    
        this.Text = name;    
    }    
   
    //獲取系統文件夾圖標    
    Icon ico2 = IconReaderHelper.GetFolderIcon(IconReaderHelper.IconSize.Large,     
        IconReaderHelper.FolderType.Open);    
    this.pictureBox2.Image = Bitmap.FromHicon(ico2.Handle);    
   
}    
   
private void btnGetExtensionIcon_Click(object sender, EventArgs e)    
{    
    if (!string.IsNullOrEmpty(this.txtExtension.Text))    
    {    
        //獲取擴展名圖標    
        Icon ico = IconReaderHelper.ExtractIconForExtension(this.txtExtension.Text, true);    
        this.pictureBox2.Image = Bitmap.FromHicon(ico.Handle);    
    }    
}   

2病往、實現圖片打印操作捣染,并提供圖片打印預覽功能,圖片自動根據頁面進行居中停巷、縮放耍攘、對齊等操作輔助類

**ImagePrintHelper **

**實現效果 ** 1)本輔助類主要是用來方便實現圖片打印操作,并提供圖片打印預覽功能畔勤,圖片自動根據頁面進行居中蕾各、縮放、對齊等默認操作庆揪。
打印預覽的時候示损,自動調整圖片為止,如下:


或者打印對話框

實現代碼
1)輔助類提供的方法接口如下所示

#region 配置參數    
/// <summary>    
/// 將在頁面上居中打印輸出嚷硫。    
/// </summary>    
public bool AllowPrintCenter = true;    
   
/// <summary>    
/// 旋轉圖像检访,如果它符合頁面更好    
/// </summary>    
public bool AllowPrintRotate = true;    
   
/// <summary>    
/// 縮放圖像,以更好地適應頁面    
/// </summary>    
public bool AllowPrintEnlarge = true;    
   
/// <summary>    
/// 允許打印收縮仔掸,以更好適應頁面    
/// </summary>    
public bool AllowPrintShrink = true;   
  
#endregion    
   
/// <summary>    
/// 構造函數    
/// </summary>    
/// <param name="image">待打印的圖片對象</param>    
public ImagePrintHelper(Image image) : this(image, "test.png")    
   
/// <summary>    
/// 構造函數    
/// </summary>    
/// <param name="image">待打印的圖片對象</param>    
/// <param name="documentname">文檔名稱</param>    
public ImagePrintHelper(Image image, string documentname)     
   
/// <summary>    
/// 顯示打印對話框脆贵,確定則進行打印    
/// </summary>    
/// <returns></returns>    
public PrinterSettings PrintWithDialog()    
   
/// <summary>    
/// 在預覽對話框中預覽圖片    
/// </summary>    
public void PrintPreview()

2)輔助類ImagePrintHelper的使用例子代碼如下所示

private void btnPrintImage_Click(object sender, EventArgs e)    
{    
    ImagePrintHelper imagePrint = new ImagePrintHelper(this.pictureBox1.Image, Path.GetFileName(this.txtFilPath.Text));    
    imagePrint.AllowPrintShrink = true;    
    imagePrint.AllowPrintCenter = true;    
    imagePrint.AllowPrintEnlarge = true;    
    imagePrint.AllowPrintRotate = true;    
    imagePrint.PrintWithDialog();//彈出打印對話框,確認進行打印    
}    
   
private void btnPrintView_Click(object sender, EventArgs e)    
{    
    ImagePrintHelper imagePrint = new ImagePrintHelper(this.pictureBox1.Image, Path.GetFileName(this.txtFilPath.Text));    
    imagePrint.PrintPreview();//彈出打印預覽頁面    
}  

2起暮、Web頁面預覽效果圖片抓取輔助類 WebPageCapture和WebPreview

**實現效果 ** 1)本輔助類主要是用來方便實現Web頁面預覽效果圖片抓取操作卖氨。


實現代碼
1)輔助類提供的方法接口如下所示

#region 字段屬性    

/// <summary>    
/// 圖片下載完畢的時間處理    
/// </summary>    
public event ImageEventHandler DownloadCompleted;    
/// <summary>    
/// 圖片處理委托定義    
/// </summary>    
/// <param name="image"></param>    
public delegate void ImageEventHandler(Image image);    
   
/// <summary>    
/// 瀏覽區(qū)域大小    
/// </summary>    
public Size BrowserSize { get; set; }    
   
/// <summary>    
/// 頁面URL地址    
/// </summary>    
public string URL { get; set; }    
   
/// <summary>    
/// 下載的圖片對象    
/// </summary>    
public Image Image { get; private set; }   
  
#endregion   
  
#region 構造函數    
   
/// <summary>    
/// 構造函數,默認為屏幕大小    
/// </summary>    
public WebPageCapture() : this(Screen.PrimaryScreen.Bounds.Size) { }    
   
/// <summary>    
/// 構造函數,指定瀏覽區(qū)域大小    
/// </summary>    
/// <param name="width">寬度</param>    
/// <param name="height">高度</param>    
public WebPageCapture(int width, int height) : this(new Size(width, height)) { }    
   
/// <summary>    
/// 構造函數负懦,指定瀏覽區(qū)域大小    
/// </summary>    
/// <param name="browserSize">瀏覽區(qū)域大小</param>    
public WebPageCapture(Size browserSize)   
  
#endregion    
   
/// <summary>    
/// 下載頁面到圖片中    
/// </summary>    
public void DownloadPage()    
   
/// <summary>    
/// 下載頁面到圖片中    
/// </summary>    
/// <param name="url">頁面Url地址</param>    
public void DownloadPage(string url) 

2)輔助類WebPageCapture的使用例子代碼如下所示

public partial class FrmWebPreview : Form    
{    
    private WebPageCapture capture = new WebPageCapture();    
    public FrmWebPreview()    
    {    
        InitializeComponent();    
   
        capture.DownloadCompleted += new WebPageCapture.ImageEventHandler(capture_DownloadCompleted);       }    
   
    void capture_DownloadCompleted(Image image)    
    {    
        this.pictureBox1.Image = image;    
    }    
   
    private void btnSnap1_Click(object sender, EventArgs e)    
    {    
        if (this.txtUrl.Text.Length == 0) return;    
   
        capture.DownloadPage(this.txtUrl.Text);                
    }   

3) 輔助類WebPreview的使用例子代碼如下所示

private void btnSnap2_Click(object sender, EventArgs e)    
{    
    if (this.txtUrl.Text.Length == 0) return;    
    this.pictureBox1.Image = WebPreview.GetWebPreview(new Uri(this.txtUrl.Text), Screen.PrimaryScreen.Bounds.Size);    
}  

2筒捺、圖片對象比較、縮放纸厉、縮略圖系吭、水印、壓縮颗品、轉換肯尺、編碼等操作輔助類 ImageHelper

**實現效果 ** 1)本輔助類主要是用來方便實現圖片對象比較、縮放躯枢、縮略圖则吟、水印、壓縮锄蹂、轉換氓仲、編碼等操作。
2)基本圖片所有的相關操作,均可在該輔助類中找到敬扛,該輔助類具有專業(yè)晰洒、全面、封裝良好等特點舔哪。


實現代碼
1)輔助類提供的方法接口如下所示

 /// <summary>    
/// 圖片對象比較欢顷、縮放槽棍、縮略圖捉蚤、水印、壓縮炼七、轉換缆巧、編碼等操作輔助類    
/// </summary>    
public class ImageHelper    
{   
    #region 圖片比較    
   
    /// <summary>    
    /// 對比兩張圖片    
    /// </summary>    
    /// <param name="bmp1">The first bitmap image</param>    
    /// <param name="bmp2">The second bitmap image</param>    
    /// <returns>CompareResult</returns>    
    public static CompareResult CompareTwoImages(Bitmap bmp1, Bitmap bmp2)   
       
    #endregion   
  
    #region 圖片縮放    
   
    /// <summary>    
    /// 按比例調整圖片大小    
    /// </summary>    
    /// <param name="imgPhoto">原始圖片對象.</param>    
    /// <param name="Percent">調整比例</param>    
    /// <returns></returns>    
    public static Image ResizeImageByPercent(Image imgPhoto, int Percent)    
        
    /// <summary>    
    /// 縮放、裁切圖片    
    /// </summary>    
    /// <param name="originalImage">原始圖片對象</param>    
    /// <param name="width">寬度</param>    
    /// <param name="height">高度</param>    
    /// <param name="mode">調整模式</param>    
    /// <returns></returns>    
    public static Image ResizeImageToAFixedSize(Image originalImage, int width, int height, ScaleMode mode)   
  
    #endregion   
  
    #region 創(chuàng)建縮略圖    
   
    /// <summary>    
    /// 生成縮略圖    
    /// </summary>    
    /// <param name="originalImagePath">源圖路徑(物理路徑)</param>    
    /// <param name="thumbnailPath">縮略圖路徑(物理路徑)</param>    
    /// <param name="width">縮略圖寬度</param>    
    /// <param name="height">縮略圖高度</param>    
    /// <param name="mode">生成縮略圖的方式</param>    
    public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ScaleMode mode)    
   
    /// <summary>    
    /// 生成縮略圖    
    /// </summary>    
    /// <param name="originalImagePath">源圖路徑(物理路徑)</param>    
    /// <param name="thumbnailPath">縮略圖路徑(物理路徑)</param>    
    /// <param name="width">縮略圖寬度</param>    
    /// <param name="height">縮略圖高度</param>    
    /// <param name="mode">生成縮略圖的方式</param>    
    public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ScaleMode mode, System.Drawing.Imaging.ImageFormat format)   
  
    #endregion   
  
    #region 圖片水印    
   
    /// <summary>    
    /// 添加文字水印   默認字體:Verdana  12號大小  斜體  黑色    位置:右下角    
    /// </summary>    
    /// <param name="originalImage">Image</param>    
    /// <param name="text">水印字</param>    
    /// <returns></returns>    
    public static Image WatermarkText(Image originalImage, string text)    
   
    /// <summary>    
    /// 添加文字水印   默認字體:Verdana  12號大小  斜體  黑色    
    /// </summary>    
    /// <param name="originalImage">Image</param>    
    /// <param name="text">水印字</param>    
    /// <param name="position">水印位置</param>    
    /// <returns></returns>    
    public static Image WatermarkText(Image originalImage, string text, WatermarkPosition position)    
   
    /// <summary>    
    /// 添加文字水印    
    /// </summary>    
    /// <param name="originalImage">Image</param>    
    /// <param name="text">水印字</param>    
    /// <param name="position">水印位置</param>    
    /// <param name="font">字體</param>    
    /// <param name="brush">顏色</param>    
    /// <returns></returns>    
    public static Image WatermarkText(Image originalImage, string text, WatermarkPosition position, Font font, Brush brush)    
        
    /// <summary>    
    /// 添加圖片水油阕尽(位置默認右下角)    
    /// </summary>    
    /// <param name="originalImage">Image</param>    
    /// <param name="watermarkImage">水印Image</param>    
    /// <returns></returns>    
    public static Image WatermarkImage(Image originalImage, Image watermarkImage)    
        
    /// <summary>    
    /// 添加圖片水印    
    /// </summary>    
    /// <param name="originalImage">Image</param>    
    /// <param name="watermarkImage">水印Image</param>    
    /// <param name="position">位置</param>    
    /// <returns></returns>    
    public static Image WatermarkImage(Image originalImage, Image watermarkImage, WatermarkPosition position)   
  
    #endregion   
  
    #region 復制到剪切板    
   
    /// <summary>    
    /// 復制指定的圖片對象到剪切板    
    /// </summary>    
    /// <param name="img">復制的圖片對象</param>    
    public static void CopyToClipboard(Image img)   
  
    #endregion   
  
    #region 其他操作    
   
    /// <summary>    
    /// 獲取圖片編碼解碼器陕悬,保存JPG時用    
    /// </summary>    
    /// <param name="mimeType"> </param>    
    /// <returns>得到指定mimeType的ImageCodecInfo </returns>    
    public static ImageCodecInfo GetCodecInfo(string mimeType)    
   
   
    /// <summary>    
    /// 設置圖片透明度    
    /// </summary>    
    /// <param name="imgPic">原始圖片對象</param>    
    /// <param name="imgOpac">透明度</param>    
    /// <returns></returns>    
    public static Image SetImgOpacity(Image imgPic, float imgOpac)    
   
    /// <summary>    
    /// 修改圖片亮度    
    /// </summary>    
    /// <param name="bmp">原始位圖對象</param>    
    /// <param name="value">亮度值</param>    
    /// <returns></returns>    
    public static Bitmap ChangeBrightness(Bitmap bmp, int value)   
  
    #region 改變圖片大小    
   
    /// <summary>    
    /// 改變圖片大小    
    /// </summary>    
    /// <param name="img">原始圖片對象</param>    
    /// <param name="width">改變的寬度</param>    
    /// <param name="height">改變的高度</param>    
    /// <returns></returns>    
    public static Image ChangeImageSize(Image img, int width, int height)    
   
    /// <summary>    
    /// 改變圖片大小    
    /// </summary>    
    /// <param name="img">原始圖片對象</param>    
    /// <param name="width">改變的寬度</param>    
    /// <param name="height">改變的高度</param>    
    /// <param name="preserveSize">限制的最小寬度或高度</param>    
    /// <returns></returns>    
    public static Image ChangeImageSize(Image img, int width, int height, bool preserveSize)    
   
    /// <summary>    
    /// 改變圖片大小(按比例縮放)    
    /// </summary>    
    /// <param name="img">原始圖片對象</param>    
    /// <param name="percentage">大小比例</param>    
    /// <returns></returns>    
    public static Image ChangeImageSize(Image img, float percentage)   
  
    #endregion    
   
    /// <summary>    
    /// 剪切圖片    
    /// </summary>    
    /// <param name="img">原始圖片對象</param>    
    /// <param name="rect">剪切區(qū)域</param>    
    /// <returns></returns>    
    public static Image CropImage(Image img, Rectangle rect)    
   
    /// <summary>    
    /// 剪裁 -- 用GDI+    
    /// </summary>    
    /// <param name="b">原始Bitmap</param>    
    /// <param name="StartX">開始坐標X</param>    
    /// <param name="StartY">開始坐標Y</param>    
    /// <param name="iWidth">寬度</param>    
    /// <param name="iHeight">高度</param>    
    /// <returns>剪裁后的Bitmap</returns>    
    public static Bitmap CropImage(Bitmap b, int StartX, int StartY, int iWidth, int iHeight)    
   
    public static Image AddCanvas(Image img, int size)    
   
    /// <summary>    
    /// 旋轉圖片    
    /// </summary>    
    /// <param name="img">待旋轉的圖片對象</param>    
    /// <param name="theta">旋轉角度</param>    
    /// <returns></returns>    
    public static Bitmap RotateImage(Image img, float theta)    
   
    private static Rectangle BoundingBox(Image img, Matrix matrix)    
   
    /// <summary>    
    /// 獲取所有屏幕的矩形寬度    
    /// </summary>    
    /// <returns></returns>    
    public static Rectangle GetScreenBounds()    
   
    /// <summary>    
    /// 使窗口背景透明    
    /// </summary>    
    /// <param name="hWnd">窗口句柄</param>    
    /// <param name="image">透明圖片</param>    
    /// <returns></returns>    
    public static Bitmap MakeBackgroundTransparent(IntPtr hWnd, Image image)    
   
    /// <summary>    
    /// 保存打印圖片文件    
    /// </summary>    
    /// <param name="image">圖片對象</param>    
    /// <param name="transColor">透明色</param>    
    /// <param name="dpi">打印的dpi</param>    
    /// <param name="path">保存文件的路徑</param>    
    public static void SaveOneInchPic(Image image, Color transColor, float dpi, string path)   
  
    #endregion   
  
    #region BASE64編碼轉換    
   
    /// <summary>    
    /// Base64編碼轉換到Image對象    
    /// </summary>    
    /// <param name="ImgBase64Str"></param>    
    /// <returns></returns>    
    public static Bitmap Base64StrToBmp(string ImgBase64Str)    
   
    /// <summary>    
    /// 從文件中轉換圖片對象到Base64編碼    
    /// </summary>    
    /// <param name="ImgName"></param>    
    /// <returns></returns>    
    public static string ImageToBase64Str(string ImgName)    
   
    /// <summary>    
    /// 轉換圖片對象到Base64編碼    
    /// </summary>    
    /// <param name="Img"></param>    
    /// <returns></returns>    
    public static string ImageToBase64Str(Image Img)   
  
    #endregion   
  
    #region 色彩處理    
   
    /// <summary>      
    /// 設置圖形顏色  邊緣的色彩更換成新的顏色      
    /// </summary>      
    /// <param name="p_Image">圖片</param>      
    /// <param name="p_OldColor">老的邊緣色彩</param>      
    /// <param name="p_NewColor">新的邊緣色彩</param>      
    /// <param name="p_Float">溶差</param>      
    /// <returns>清理后的圖形</returns>      
    public static Image SetImageColorBrim(Image p_Image, Color p_OldColor, Color p_NewColor, int p_Float)    
   
    /// <summary>      
    /// 設置圖形顏色  所有的色彩更換成新的顏色      
    /// </summary>      
    /// <param name="p_Image">圖片</param>      
    /// <param name="p_OdlColor">老的顏色</param>      
    /// <param name="p_NewColor">新的顏色</param>      
    /// <param name="p_Float">溶差</param>      
    /// <returns>清理后的圖形</returns>      
    public static Image SetImageColorAll(Image p_Image, Color p_OdlColor, Color p_NewColor, int p_Float)    
   
    /// <summary>      
    /// 設置圖形顏色  坐標的顏色更換成新的色彩 (漏斗)      
    /// </summary>      
    /// <param name="p_Image">新圖形</param>      
    /// <param name="p_Point">位置</param>      
    /// <param name="p_NewColor">新的色彩</param>      
    /// <param name="p_Float">溶差</param>      
    /// <returns>清理后的圖形</returns>      
    public static Image SetImageColorPoint(Image p_Image, Point p_Point, Color p_NewColor, int p_Float)    
   
    /// <summary>      
    /// SetImageColorPoint 循環(huán)調用 檢查新的坐標是否符合條件 符合條件會寫入棧p_ColorStack 并更改顏色      
    /// </summary>      
    /// <param name="p_DataBytes">數據區(qū)</param>      
    /// <param name="p_Stride">行掃描字節(jié)數</param>      
    /// <param name="p_ColorStack">需要檢查的位置棧</param>      
    /// <param name="p_X">位置X</param>      
    /// <param name="p_Y">位置Y</param>      
    /// <param name="p_OldColor">老色彩</param>      
    /// <param name="p_NewColor">新色彩</param>      
    /// <param name="p_Float">溶差</param>      
    private static void SetImageColorPoint(byte[] p_DataBytes, int p_Stride, Stack<Point> p_ColorStack, int p_X, int p_Y, Color p_OldColor, Color p_NewColor, int p_Float)    
   
    /// <summary>      
    /// 檢查色彩(可以根據這個更改比較方式      
    /// </summary>      
    /// <param name="p_CurrentlyColor">當前色彩</param>      
    /// <param name="p_CompareColor">比較色彩</param>      
    /// <param name="p_Float">溶差</param>      
    /// <returns></returns>      
    private static bool ScanColor(Color p_CurrentlyColor, Color p_CompareColor, int p_Float)   
  
    #endregion   
#region 圖像壓縮    
/// <summary>    
/// 將Bitmap對象壓縮為JPG圖片類型    
/// </summary>    
/// </summary>    
/// <param name="bmp">源bitmap對象</param>    
/// <param name="saveFilePath">目標圖片的存儲地址</param>    
/// <param name="quality">壓縮質量,越大照片越清晰按傅,推薦80</param>    
public static void CompressAsJPG(Bitmap bmp, string saveFilePath, int quality)    

/// <summary>    
/// 將inputStream中的對象壓縮為JPG圖片類型    
/// </summary>    
/// <param name="inputStream">源Stream對象</param>    
/// <param name="saveFilePath">目標圖片的存儲地址</param>    
/// <param name="quality">壓縮質量捉超,越大照片越清晰,推薦80</param>    
public static void CompressAsJPG(Stream inputStream, string saveFilePath, int quality)   

#endregion   

#region 圖片轉換    

/// <summary>    
/// 把Image對象轉換為Byte數組    
/// </summary>    
/// <param name="image">圖片Image對象</param>    
/// <returns>字節(jié)集合</returns>    
public static byte[] ImageToBytes(System.Drawing.Image image)    

/// <summary>    
/// 轉換Byte數組到Image對象    
/// </summary>    
/// <param name="bytes">字節(jié)數組</param>    
/// <returns>Image圖片</returns>    
public static System.Drawing.Image ImageFromBytes(byte[] bytes)    

/// <summary>    
/// 轉換地址(文件路徑或者URL地址)到Image對象    
/// </summary>    
/// <param name="url">圖片地址(文件路徑或者URL地址)</param>    
/// <returns>Image對象</returns>    
public static System.Drawing.Image ImageFromUrl(string url)   

#endregion    

2) 輔助類ImageHelper的使用例子代碼如下所示

private void btnLoadBitmap_Click(object sender, EventArgs e)    
{    
    //加載圖片    
    string file = FileDialogHelper.OpenImage();    
    if (!string.IsNullOrEmpty(file))    
    {    
        pictureBox1.Image = Image.FromFile(file);    
    }    
}    
   
private void btnWaterMark_Click(object sender, EventArgs e)    
{    
    //圖片水印效果    
    string file = FileDialogHelper.OpenImage();    
    if (!string.IsNullOrEmpty(file))    
    {    
        this.pictureBox2.Image = ImageHelper.WatermarkImage(this.pictureBox1.Image, Image.FromFile(file));    
    }    
}    
   
private void btnTextWatermark_Click(object sender, EventArgs e)    
{    
    //文字水印效果    
    this.pictureBox2.Image = ImageHelper.WatermarkText(this.pictureBox1.Image, "測試水印效果");    
}    
   
private void btnZoom_Click(object sender, EventArgs e)    
{    
    //按比例放大圖片    
    this.pictureBox2.Image = ImageHelper.ResizeImageByPercent(this.pictureBox1.Image, 200);    
}    
   
private void btnRotate_Click(object sender, EventArgs e)    
{    
    //旋轉圖片    
    this.pictureBox2.Image = ImageHelper.RotateImage(this.pictureBox1.Image, 90);    
}   

2唯绍、彈出打印窗體的預覽對話框輔助類 PrintFormHelper

**實現效果 ** 1)本輔助類主要是用來方便實現窗體界面打印的功能拼岳。
2)窗體界面打印提供通用的打印預覽功能。


實現代碼
1)輔助類提供的方法接口如下所示

/// <summary>    
/// Winform窗口打印輔助類    
/// </summary>    
public class PrintFormHelper    
{    
       /// <summary>    
       /// 彈出打印窗體的預覽對話框    
       /// </summary>    
       /// <param name="form"></param>    
       public static void Print(Form form)    
}  

2) 輔助類PrintFormHelper的使用例子代碼如下所示

private void btnPrintForm_Click(object sender, EventArgs e)    
{    
    try   
    {    
        this.Cursor = Cursors.WaitCursor;    
        PrintFormHelper.Print(this);//打印當前窗體    
    }    
    catch (Exception ex)    
    {    
        MessageBox.Show(this, ex.Message);    
    }    
    finally   
    {    
        this.Cursor = Cursors.Default;    
    }    
}    

**2况芒、抓取整個屏幕或指定窗口惜纸,并可把抓取的圖片保存到文件等操作輔助類 ScreenCapture實現效果 **
1)本輔助類主要是用來方便實現抓取整個屏幕或指定窗口,并可把抓取的圖片保存到文件等操作 2)該輔助類類非常方便實現對桌面绝骚、指定窗口進行屏幕截圖耐版,并可以指定保存路徑、指定圖片格式压汪、后綴名等屬性對截圖進行保存粪牲,適合用于對屏幕監(jiān)控等相關的操作中。

實現代碼
1)輔助類提供的方法接口如下所示

/// <summary>    
/// 圖片保存的路徑止剖,默認為C:\\CaptureImages    
/// </summary>    
public string ImageSavePath    
   
/// <summary>    
/// 圖片的后綴名虑瀑,如果為空,使用圖片格式作為后綴名    
/// </summary>    
public string ImageExtension    
   
/// <summary>    
/// 圖片保存的格式    
/// </summary>    
public ImageFormat ImageFormat    
   
/// <summary>    
/// 抓取桌面整個屏幕截圖到一個圖片對象中    
/// </summary>    
/// <returns></returns>    
public Image CaptureScreen()    
   
/// <summary>    
/// 抓取桌面整個指定窗口的截圖到一個圖片對象中    
/// </summary>    
/// <param name="handle">指定窗口的句柄</param>    
/// <returns></returns>    
public Image CaptureWindow(IntPtr handle)    
   
/// <summary>    
/// 抓取桌面整個指定窗口的截圖滴须,并保存到文件中    
/// </summary>    
/// <param name="handle"></param>    
/// <param name="filename"></param>    
/// <param name="format"></param>    
public void CaptureWindowToFile(IntPtr handle, string filename, ImageFormat format)    
   
/// <summary>    
/// 根據屬性配置自動保存圖片    
/// </summary>    
public void AutoCaptureScreen()    
   
/// <summary>    
/// 抓取桌面整個指定窗口的截圖舌狗,并保存到文件中    
/// </summary>    
/// <param name="filename"></param>    
/// <param name="format"></param>    
public void CaptureScreenToFile(string filename, ImageFormat format)

2)輔助類ScreenCapture的使用例子代碼如下所示

ScreenCapture capture = new ScreenCapture();  
Image image = capture.CaptureWindow(form.Handle); 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扔水,隨后出現的幾起案子痛侍,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件主届,死亡現場離奇詭異赵哲,居然都是意外死亡,警方通過查閱死者的電腦和手機君丁,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門枫夺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绘闷,你說我怎么就攤上這事橡庞。” “怎么了印蔗?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵麻裁,是天一觀的道長嗡呼。 經常有香客問我敷待,道長橄唬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任耙厚,我火速辦了婚禮强挫,結果婚禮上,老公的妹妹穿的比我還像新娘薛躬。我一直安慰自己俯渤,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布泛豪。 她就那樣靜靜地躺著稠诲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诡曙。 梳的紋絲不亂的頭發(fā)上臀叙,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音价卤,去河邊找鬼劝萤。 笑死,一個胖子當著我的面吹牛慎璧,可吹牛的內容都是我干的床嫌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胸私,長吁一口氣:“原來是場噩夢啊……” “哼厌处!你這毒婦竟也來了?” 一聲冷哼從身側響起岁疼,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤阔涉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體瑰排,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡贯要,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了椭住。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崇渗。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖京郑,靈堂內的尸體忽然破棺而出宅广,到底是詐尸還是另有隱情,我是刑警寧澤傻挂,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布乘碑,位于F島的核電站挖息,受9級特大地震影響金拒,放射性物質發(fā)生泄漏。R本人自食惡果不足惜套腹,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一绪抛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧电禀,春花似錦幢码、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至政基,卻和暖如春贞铣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沮明。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工辕坝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荐健。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓酱畅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親江场。 傳聞我的和親對象是個殘疾皇子纺酸,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容