为什么WPF使图像处理变得更加困难?

时间:2011-06-24 17:48:18

标签: wpf bitmapimage

我曾经只能使用BitmapGraphics对象来完成这项工作。现在我一直在使用WPF,我似乎唯一可以做的就是加载一个图像并显示它并让它在愚蠢的屏幕上跳舞。他们为什么要摆脱这些非常有用的工具。他们试图使.Net难以理解吗?

我想要做的就是从文件中加载图像并将其分成两部分。使用.Net 2.0和System.Drawing很容易。但是对于WPF,我在没有使用一些非常低级代码的情况下碰到了一堵砖墙。我尝试过使用WriteableBitmap。但它似乎并不是我想要的。有没有办法将DrawingContext包裹在BitmapImage或其他什么地方?

请告诉我WPF不仅仅是HTML的应用程序。我真的很沮丧!!

编辑:

另外,如何将图像保存到文件?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

有这个http://www.nerdparadise.com/tech/csharp/wpfimageediting/

或者您可以在项目中添加对System.Drawing的引用,然后按照您的方式进行编辑。

答案 2 :(得分: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);