Открытие файла изображения для класса Bitmap как 32bppPArgb - PullRequest
2 голосов
/ 03 ноября 2011

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

Я разрешаю пользователю выбирать любой файл изображения и создаю новый класс Bitmap из файла.

Затем я рисую изображение с помощью пользовательской живописи. Это очень медленно, и мне говорят, что GDI намного быстрее обрабатывает изображения в пиксельном формате 32bppPArgb.

Как мне выполнить преобразование? Предполагая, что у меня есть строка для имени файла, которая может быть JPEG, TIF, PNG и т. Д., И я хочу загрузить ее в класс Bitmap.

Edit:

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

using (Bitmap tempImage = new Bitmap(filename))
{
    Image = new Bitmap(tempImage.Width, tempImage.Height, PixelFormat.Format32bppPArgb);

    using (Graphics g = Graphics.FromImage(Image))
    {
        g.DrawImageUnscaled(tempImage, 0, 0);
    }
}

1 Ответ

1 голос
/ 04 ноября 2011

Если у вас есть проблема с масштабированием, она не вызвана форматом пикселя. Вместо этого это, вероятно, вызвано настройками DPI в файле исходного изображения. Попробуйте это вместо .DrawImageUnscaled:

  g.DrawImage(
      tempImage,
      new Reactangle( Point.Empty, Image.Size ),
      new Reactangle( Point.Empty, Image.Size ),
      GraphicsUnit.Pixels );

Это то, что я всегда использовал вместо .DrawImageUnscaled - слишком много раз меня подводило!

...