Ограничения размера BitmapImage в Silverlight - PullRequest
2 голосов
/ 08 октября 2010

Я создаю приложение для Windows Phone 7, которое включает в себя получение больших изображений из Интернета и помещает его в ScrollViewer, чтобы пользователь мог пролистывать. Я думаю, что я достигаю ограничения BitmapImage, так как изображение кажется обрезанным до 2048 пикселей по высоте или ширине.

Является ли это известным ограничением Silverlight BitmapImage и есть ли какой-то другой класс, который можно использовать в этом случае, чтобы разрешить прокрутку больших изображений?

Спасибо

1 Ответ

7 голосов
/ 08 октября 2010

Да, есть ограничение 2k x 2k. Это ограничение и обходной путь описаны в документе «Создание высокопроизводительных приложений Silverlight для Windows Phone» http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=3a8636bf-185f-449a-a0ce-83502b9ec0ec

Ограничения по размеру: начиная с Windows Камера телефона на 5 Мп и экран разрешение меньше чем на других платформы, ограничения для изображений, которые могут быть обработаны 2k х 2k пикселей. Все, что больше, будет автоматически выбирается при более низкой разрешение и изображение потеряет немного богатства. Обработка изображений Больше 2к х 2к Есть сценарии, где вам нужно обработать изображения размером более 2k x 2k, например, Фото редактор или обрезка изображений. В тех сценарии, вы можете обрабатывать изображения которые больше чем 2k x 2k в файл, а затем отобразить часть, которая вписывается в 2K х 2K. Вы можете использовать комбинация WriteableBitmap с LoadJpeg, чтобы сделать это. Пример № 5 - LoadingLargeImages

XAML:

<StackPanel>
    <Image Height="3000" Width="3000" Name="image1" Stretch="Fill" />
    <Button Content="Load" Height="70" Width="152" Click="btnLoad_Click" />
</StackPanel>

Код позади:

private void btnLoad_Click(object sender, RoutedEventArgs e)
{
    StreamResourceInfo sri = null;
    Uri uri = new                                                                           Uri("LoadJpegSample;component/Test3k3k.JPG", UriKind.Relative);
    sri = Application.GetResourceStream(uri);

    WriteableBitmap wb = new WriteableBitmap((int)this.image1.Width, (int)this.image1.Height);

    Extensions.LoadJpeg(wb, sri.Stream);
    this.image1.Source = wb;
}

Что нужно знать при использовании больше, чем 2k x 2k Изображения:

  • Отображение значительно медленнее
  • НЕ используйте его для анимации или панорамирования.

Метод Resize WriteableBitmapEx также можно использовать для этой задачи, если нет потока JPEG.

...