2010-03-23 3 views
0

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

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

ответ

1

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

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

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

+0

Еще не пробовал, даже не знал об этом! Я попробую, когда я смогу вернуться на свой компьютер. – Califer

+0

Я изменил внутреннюю часть цикла for на следующее, и теперь он работает. Изображение изображения = новое изображение(); BitmapSource tempSource = Window1.GetNextImage (i); CroppedBitmap CB = новый CroppedBitmap (tempSource, новый Int32Rect (0, 0, Math.min ((INT) Window1.totalWinWidth, tempSource.PixelWidth), Math.min ((INT) Window1.totalWinHeight, tempSource.PixelHeight))); image.Source = cb; canvas1.Children.Add (изображение); – Califer

+0

> _ <Я думаю, я не могу поместить форматирование кода в комментарий ... – Califer

0

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

+0

Правильно, вот что я пытаюсь сделать. Однако, когда я загружаю их в размеры, были установлены значения NaN и 0. – Califer

+0

Каков тип возвращаемого объекта из Window1.GetNextImage (i)? Это тот, у кого есть NaN и 0? –

+0

Это BitmapSource. Я уверен, что он имеет правильную информацию для размера, но когда я загружаю его в изображение, изображение не имеет правильных размеров. – Califer

3

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

  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); 
+0

Добро пожаловать! Рад, что смог помочь. :-) –

Смежные вопросы