WPF图像裁剪

时间:2010-03-23 21:00:06

标签: c# wpf image canvas

我正在加载图像层以制作单个图像。我现在正将它们全部堆叠在画布上。我已经设置好了,因此用户可以指定单个图像的最终尺寸,但即使我更改画布的大小,图像也会保留原始尺寸。

我试图在装入图像时修改图像尺寸,但尺寸为NaN,实际尺寸为0,所以我无法在那里更改它们。

我开始认为帆布可能不是那种方式。有关如何剪裁图像以适合特定尺寸的任何建议吗?

        canvas1.Children.Clear();
        int totalImages = Window1.GetNumberOfImages();
        if (drawBackground)
            canvas1.Background = new SolidColorBrush(Color.FromArgb(a,r,g,b));
        else
            canvas1.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0));

        for (int i = 0; i < totalImages; i++)
        {
            Image image = new Image();
            image.Source = Window1.GetNextImage(i);

            canvas1.Children.Add(image);                
        }

3 个答案:

答案 0 :(得分:3)

对于其他在这里做同样事情的人来说,这是我工作的代码。谢谢Jeffrey!

            Image image = new Image();
            BitmapSource tempSource = Window1.GetNextImage(i);
            CroppedBitmap cb = new CroppedBitmap(tempSource,
                        new Int32Rect(0, 0, 
                            Math.Min((int)Window1.totalWinWidth, tempSource.PixelWidth), 
                            Math.Min((int)Window1.totalWinHeight, tempSource.PixelHeight)));
            image.Source = cb;

            canvas1.Children.Add(image);

答案 1 :(得分:1)

要获取画布的当前尺寸,您必须先调用MeasureArrange。这将避免NaN和0。

使用RenderTransform更改画布显示的图像大小。

我从未尝试裁剪图像,所以我不知道该怎么做,但我看到有一个CroppedBitmap对象。我猜你已经试过了吗?

答案 2 :(得分:0)

在我看来,你应该修改图像源的大小,而不仅仅是画布。 Canvas只是一个容器,它没有能力修改它的子项。