wpf image,WPF中的圖像處理簡介

 2023-10-18 阅读 29 评论 0

摘要:和Winform中的GDI+相比,WPF提供了一組新的API用于顯示和編輯圖像。新API特點如下: 適用于新的或專用圖像格式的擴展性模型。 對包括位圖 (BMP)、聯合圖像專家組 (JPEG)、可移植網絡圖形 (PNG)、標記圖像文件格式 (TIFF)、Microsoft Windows Media 照片、圖形

和Winform中的GDI+相比,WPF提供了一組新的API用于顯示和編輯圖像。新API特點如下:

  1. 適用于新的或專用圖像格式的擴展性模型。
  2. 對包括位圖 (BMP)、聯合圖像專家組 (JPEG)、可移植網絡圖形 (PNG)、標記圖像文件格式 (TIFF)、Microsoft Windows Media 照片、圖形交換格式 (GIF) 和圖標 (.ico) 在內的本機圖像格式增強了性能和安全性。
  3. 高位深圖像數據的保留最多 32 位/通道。
  4. 非破壞性圖像縮放、裁切和旋轉。
  5. 簡化的顏色管理
  6. 支持文件內的專用元數據。
  7. 托管組件利用非托管基礎結構提供圖像與其他 WPF 功能(如用戶界面 (UI)、動畫和圖形)的無縫集成。托管組件還可以從 Windows Presentation Foundation (WPF) 圖像處理編解碼器擴展性模型獲益,利用該模型可以實現自動識別 WPF 中的新圖像格式。

大部分托管的 WPF 圖像處理 API 駐留在 System.Windows.Media.Imaging 命名空間中,不過,幾個重要的類型(如 ImageBrush 和 ImageDrawing)都駐留在 System.Windows.Media 命名空間,Image 駐留在 System.Windows.Controls 命名空間。

下面我通過一個簡單的示例演示一下新的API的使用方法:

圖像編碼格式轉換:

var imageStreamSource = File.OpenRead(@"r:\1\24.bmp");
var decoder = BitmapDecoder.Create(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var bitmapFrame = decoder.Frames[0];

wpf image、//在界面上顯示圖片
//image1.Source = bitmapFrame;

var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(bitmapFrame);
encoder.Save(File.Create(@"r:\1\3.jpg"));

這個功能非常簡單,就是把一個bmp格式的圖片轉換為了一個jpg格式的圖片。這個示例也顯示了WPF的圖像處理的基本方式:

  1. 從解碼器(xxxDecoder)中獲取圖像信息
    創建解碼器后,圖像信息就保存在Frames(雖然大部分圖像(jpg,bmp,png等)只有一幀,但GIF,ico等圖像有多幀)屬性中了。
  2. 用編碼器(xxxEncoder)保持圖像信息
    相應的,編碼時只要創建編碼器,并設置相應的幀即可。

圖像處理:

常用的圖像處理包括縮放、裁切和旋轉等,如下是一個將圖像旋轉90度的例子。

圖像處理中的圖像有哪些。var imageStreamSource = File.OpenRead(@"r:\1\24.bmp");
var decoder = BitmapDecoder.Create(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var bitmapFrame = decoder.Frames[0];?
?

TransformedBitmap myRotatedBitmapSource = new TransformedBitmap();
myRotatedBitmapSource.BeginInit();
myRotatedBitmapSource.Source = bitmapFrame;?
?

// 旋轉90
myRotatedBitmapSource.Transform = new RotateTransform(90);
myRotatedBitmapSource.EndInit();?

//旋轉

var rotate = new RotateTransform(90);
var rotatedBitMap = new TransformedBitmap(bitmapFrame, rotate);

圖像處理中的距離相關概念,image1.Source = rotatedBitMap;

裁剪
//CroppedBitmap chainedBitMap = new CroppedBitmap(bitmapFrame,new Int32Rect(100, 0, (int)bitmapFrame.Width - 100, (int)bitmapFrame.Height));

縮放
//var scare = new ScaleTransform(1.5, 2);
//var scaredBitMap = new TransformedBitmap(bitmapFrame, scare);

var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rotatedBitMap));
//encoder.Frames.Add(BitmapFrame.Create(scaredBitMap));
//encoder.Frames.Add(BitmapFrame.Create(chainedBitMap));
encoder.Save(File.Create(@"r:\1\3.jpg"));

和上面的例子相比,這里就是多了一個TransformedBitmap變換,其實這和xaml中的變換時一樣的。

機器視覺中的圖像處理、<Image Width="150" Margin="5" Grid.Column="0" Grid.Row="1">
  <
Image.Source>
    <
TransformedBitmap Source="/sampleImages/watermelon.jpg" >
      <
TransformedBitmap.Transform>
        <
RotateTransform Angle="90"/>
      </
TransformedBitmap.Transform>
    </
TransformedBitmap>
  </
Image.Source>
</
Image>

其它變換也都可以參照xaml中處理方式進行,這里就不過多介紹了。

???

轉載于:https://www.cnblogs.com/TianFang/archive/2009/10/18/1585450.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/148358.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息