2013-07-19 1 views
-3

Изменение размера файла изображения в C#, из тех Wich обычны используются по крайней мере (BMP, JPG и т.д. и т.п.)Изменение размера изображения с C#

Я нашел много фрагментов, но не очень полный. Поэтому я снова попрошу, чтобы кто пришел сюда, может использовать полный файл:

Это просто выводит файл с одинаковой шириной и высотой.

using System; 
using System.Drawing; 
using System.Drawing.Drawing2D; 

namespace PicResize 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ResizeImage(0, 0, 200, 200); 
     } 

     public static void ResizeImage(int X1, int Y1, int Width, int Height) 
     { 

      string fileName = @"C:\testimage.jpg"; 
      using (Image image = Image.FromFile(fileName)) 
      { 
       using (Graphics graphic = Graphics.FromImage(image)) 
       { 
        // Crop and resize the image. 
        Rectangle destination = new Rectangle(0, 0, Width, Height); 
        graphic.DrawImage(image, destination, X1, Y1, Width, Height, GraphicsUnit.Pixel); 
       } 
       image.Save(@"C:\testimagea.jpg"); 
      } 
     } 
    } 
} 

Итак, поскольку нет хороших примеров, как это работает? Что мне нужно исправить здесь?

Благодаря

+0

Слова 'width' и' height' очень информативны – Sayse

+0

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

+0

> «Вопросы, касающиеся проблем с кодом, который вы написали, должны> описывать конкретную проблему и включать в себя действительный код для его воспроизведения.> См. SSCCE.org для руководства». - DGibbs, p.s.w.g, ryan1234, CanSpice ЧТО? У вас есть: A) Мой код B) Конкретный вопрос (ЧТО ИСКАТЬ, ЧТО НЕ РАБОТАЕТ?) C) Действующий код для воспроизведения. Вместо того, чтобы ходить в моддинге для какой-то виртуальной репутации, постарайтесь быть конструктивными –

ответ

1

Вы можете сделать это:

 public void ResizeImage(string fileName, int width, int height) 
     { 
      using (Image image = Image.FromFile(fileName)) 
      { 
       new Bitmap(image, width, height).Save(fileName); 
      } 
     } 

Если его новый файл просто заменить с этим или с указанием пути по вашему выбору:

new Bitmap(image, width, height).Save(fileName.Insert(fileName.LastIndexOf('.'),"A")); 
+0

, что один работал, спасибо! есть какой-либо способ немного полировать изображение? Я видел некоторый код о свойствах изображения при сохранении, но я не могу найти их в свойствах объекта Bitmap. Просто лишний, если вы знаете –

+0

, вы имеете в виду изменение пикселей или попытку сохранить его с наилучшим качеством? – terrybozzio

+0

Попытка сэкономить на изменение размера с наименьшей потерей качества возможно Например, это код, который я нашел: http://stackoverflow.com/questions/87753/resizing-an-image-without-losing -any-quality –

2

Проблема с примерами кода является то, что вы открываете изображение, и простой рисунок на этом изображении, без фактического изменения размера.

Что вы можете сделать, это создать новый Bitmap на основе оригинального изображения и снабдить его новым размером. Эта функция должна работать для вас:

public void ResizeImage(string fileName, int width, int height) 
{ 
    using (Image image = Image.FromFile(fileName)) 
    { 
     using (Image newImage = new Bitmap(image, width, height)) 
     { 
      //must dispose the original image to free up the file ready 
      //for re-write, otherwise saving will throw an error 
      image.Dispose(); 
      newImage.Save(fileName); 
     } 
    } 
}