Обрезка изображений WPF - PullRequest
0 голосов
/ 24 марта 2010

Я загружаю слои изображений, чтобы сделать одно изображение. В настоящее время я укладываю их всех на холст. Я настроил его так, чтобы пользователь мог указать конечные размеры одного изображения, но даже когда я изменяю размер холста, изображения сохраняют свои исходные размеры.

Я пытался изменить размер изображения при загрузке, но размеры были 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 ]

3 голосов
/ 24 марта 2010

Для всех, кто делает то же самое, вот код, который я получил. Спасибо, Джеффри!

            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 голос
/ 24 марта 2010

Чтобы получить текущие размеры холста, сначала необходимо вызвать Measure и Arrange. Это позволит избежать NaN и 0.

Используйте RenderTransform, чтобы изменить размер изображения, отображаемого в Canvas.

Я никогда не пытался обрезать изображение, поэтому я не знаю, как это сделать, но вижу, что есть объект CroppedBitmap. Я полагаю, вы уже пробовали это?

0 голосов
/ 24 марта 2010

Мне кажется, что вы должны изменять размер источников изображения, а не только холст. Canvas - это просто контейнер, у него нет возможности изменять дочерние элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...