2011-06-24 35 views
3

我以前只能使用BitmapGraphics這樣的對象。現在我已經使用WPF,我似乎能夠做的唯一事情就是加載一個圖像並顯示它,並讓它在愚蠢的屏幕上跳舞。他們爲什麼擺脫這些非常有用的工具。他們是否試圖讓網絡愚蠢?爲什麼WPF使圖像工作變得更加困難?

我想要做的就是從文件中加載一個圖像,並將其分爲兩部分。使用.Net 2.0和System.Drawing這很容易。但與WPF,我正在打磚牆,沒有使用一些非常低的代碼。我已經嘗試使用WriteableBitmap。但它似乎並不真正是我想要的。有沒有辦法圍繞BitmapImage圍繞DrawingContext什麼?

請告訴我,WPF不僅僅是應用程序的HTML。我真的很沮喪!

編輯:

另外,如何在地球上保存影像文件?

+1

至於將影像保存到文件(這是一個單獨的問題,應受到同樣的對待),試圖在尋找它網頁。這裏有一個命中:http://blogs.msdn.com/b/kirillosenkov/archive/2009/10/12/saving-images-bmp-png-etc-in-wpf-silverlight.aspx –

+0

嘗試使用OpenGL。你會發現它比GDI +(System.Drawing)和WPF更快更有用。 OpenTK(www.opentk.com)是.NET圍繞OpenGL的一個很好的包裝。 – IDWMaster

回答

1

如果你想減少圖像中的兩個部分,爲什麼不使用CroppedBitmap類?

請考慮以下XAML。一個來源BitmapImage由兩個CroppedBitmaps共享,每個顯示來源的不同部分。

<Window.Resources> 
    <BitmapImage x:Key="bmp" UriSource="SomeBitmap.jpg" /> 
</Window.Resources> 

<StackPanel> 
    <Image> 
     <Image.Source> 
      <CroppedBitmap Source="{StaticResource ResourceKey=bmp}"> 
       <CroppedBitmap.SourceRect> 
        <Int32Rect X="0" Y="0" Width="100" Height="100" /> 
       </CroppedBitmap.SourceRect> 
      </CroppedBitmap> 
     </Image.Source> 
    </Image> 
    <Image> 
     <Image.Source> 
      <CroppedBitmap Source="{StaticResource ResourceKey=bmp}"> 
       <CroppedBitmap.SourceRect> 
        <Int32Rect X="100" Y="150" Width="50" Height="50" /> 
       </CroppedBitmap.SourceRect> 
      </CroppedBitmap> 
     </Image.Source> 
    </Image> 
</StackPanel> 

更新:做類似的事情在代碼:

 var bitmapImage = new BitmapImage(new Uri(...)); 
     var sourceRect = new Int32Rect(10, 10, 50, 50); 
     var croppedBitmap = new CroppedBitmap(bitmapImage, sourceRect); 
+0

有趣,但我想在XAML下面做這件事,因爲每個圖片都用在兩個單獨的控件中。我敢打賭,這很容易轉化爲代碼。沒有? – Jordan

+0

當然,這只是你*可以*在XAML中建立對象的方式。相同的對象('CroppedBitmap','Int32Rect'等)可以用代碼構建,沒有汗水。 –

0

那麼有這個http://www.nerdparadise.com/tech/csharp/wpfimageediting/

或者也許你可以添加一個引用System.Drawing中到您的項目,然後執行編輯你舒服的方式。

+0

是的,我想到了。有趣的網站。我非常努力地努力不要成爲那麼低的水平。如果我要做低層次的事情,我會寫我自己的可重用的程序庫程序集,這是很多時間。也許... – Jordan

0

您可能最好使用TransformedBitmap。將您的位圖加載爲BitmapSource,然後將Transform屬性設置爲您希望圖像轉換的屬性。您有幾種不同的轉換選項here。這使您可以旋轉,旋轉,矩陣等轉換。如果您想要應用多個轉換,請使用TransformGroup並一次應用多個轉換。您可以使用BitmapFrame.Create(...)更多地使用轉換後的圖像。

一些僞代碼:

var image = new BitmapSource(...); //Your image 
var transformBitmap = new TransformedBitmap(image); 
var transformBitmap.Transform = ..//Set your transform; 
//optionally: 
var frame = BitmapFrame.Create(transformBitmap); 
+0

有趣。我希望得到的圖像比最初的圖像小。 – Jordan

+0

TransformedBitmap僅支持90度倍數的縮放變換和旋轉變換。 –

相關問題