Как изменить размер растрового изображения в .NET CF 2.0

У меня есть растровое изображение, которое я хочу программно увеличить до ~ 1,5x или 2x до исходного размера. Есть ли простой способ сделать это в .NET CF 2.0?


person Mr. Lame    schedule 04.07.2009    source источник


Ответы (2)


Один из «нормальных» способов - создать новый Bitmap желаемого размера, создать для него Graphics и затем нарисовать на нем старое изображение с помощью Graphics.DrawImage(Point, Rectangle). Доступны ли какие-либо из этих вызовов в Compact Framework?

РЕДАКТИРОВАТЬ: Вот короткое, но полное приложение, которое работает на рабочем столе:

using System;
using System.Drawing;

class Test
{
    static void Main()
    {
        using (Image original = Image.FromFile("original.jpg"))
        using (Bitmap bigger = new Bitmap(original.Width * 2,
                                   original.Height * 2,
                                   original.PixelFormat))
        using (Graphics g = Graphics.FromImage(bigger))
        {
            g.DrawImage(original, new Rectangle(Point.Empty, bigger.Size));
            bigger.Save("bigger.jpg");
        }
    }
}

Несмотря на то, что это работает, вполне могут быть лучшие способы сделать это с точки зрения интерполяции и т. Д. Если это работает на Compact Framework, это, по крайней мере, даст вам отправную точку.

person Jon Skeet    schedule 04.07.2009
comment
Опередите меня, потому что я посмотрел, доступны ли они в Compact Framework =) - person colithium; 05.07.2009
comment
Я пробовал, но MSDN не совсем ясно понимал этот вопрос ... по крайней мере, оффлайн-версию, которую я использовал. - person Jon Skeet; 05.07.2009
comment
Интересно, какой InterpolationMode он использует, когда вы просто создаете такой Bitmap и просите его масштабировать. Опять же, MSDN непонятно ... - person colithium; 05.07.2009
comment
Работает, но требует исправления нескольких ошибок, касающихся совместимости с CF: 1) Свойство Bitmap.PixelFormat не существует 2) Rectangle имеет только конструктор Rectangle (x, y, width, height) 3) g.DrawImage не имеет простого переопределения. Вам нужно вызвать это: g.DrawImage (оригинал, новый прямоугольник (0, 0, больше.Ширина, больше.высота), новый прямоугольник (0, 0, исходная ширина, исходная высота), GraphicsUnit.Pixel); - person Mr. Lame; 05.07.2009

CF имеет доступ к стандартным объектам Graphics и Bitmap, таким как полная структура.

  • Превратить исходное изображение в растровое изображение
  • Создайте новый Bitmap желаемого размера
  • Свяжите объект Graphics с НОВЫМ растровым изображением
  • Вызовите g.DrawImage () со старым изображением и перегрузкой для указать ширину / высоту
  • Выбрасывать вещи

Версии: .NET Compact Framework Поддерживается в: 3.5, 2.0, 1.0

person colithium    schedule 04.07.2009