Изменение размеров изображения в .NET со Сглаживанием

Вам необходимо удалить строку запроса, используя флаг QSD . Попробуйте:

RewriteRule ^ http://www.test.net/about/ad/ [L,R=301,QSD]

или по-старому, добавив ?

RewriteRule ^ http://www.test.net/about/ad/? [L,R=301]

9
задан Nick Higgs 2 December 2008 в 10:36
поделиться

5 ответов

Попробуйте графику. DrawImage (bmp, 0, 0, ширина, высота); Также проверьте эту Статью MSDN об интерполяции.

2
ответ дан 4 December 2019 в 08:53
поделиться

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

Bitmap bmp = new Bitmap(width, height);
Graphics graph = Graphics.FromImage(bmp);
graph.InterpolationMode = InterpolationMode.High;
graph.CompositingQuality = CompositingQuality.HighQuality;
graph.SmoothingMode = SmoothingMode.AntiAlias;
graph.DrawImage(image, new Rectangle(0, 0, width, height));

Насколько сглаживание идет, самый важный параметр graph.InterpolationMode.

Спасибо.

20
ответ дан 4 December 2019 в 08:53
поделиться

Сглаживание не имеет никакого отношения к растровой графике. Это только применимо к векторной графике. Очевидно, изображение является графическим растром.

Необходимо посмотреть на InterpolationMode.

2
ответ дан 4 December 2019 в 08:53
поделиться

Проблемой могло бы быть другое место. Я использую подобный код для изменения размеров изображений, и он работает хорошо, но самое большое различие - то, что, когда Вы сохраняете образ, необходимо указать качество (jpeg):

ImageCodecInfo[] codecs=ImageCodecInfo.GetImageEncoders();
ImageCodecInfo codec = null;
for (int i = 0; i<codecs.Length;i++)
{
  if(codecs[i].MimeType.Equals("image/jpeg"))
    codec = codecs[i];
}

EncoderParameters encoderParametersInstance = null;

if (codec!=null)
{
  Encoder encoderInstance=Encoder.Quality;
  encoderParametersInstance = new EncoderParameters(2);
  //100% quality, try different values, around 80-90 gives good results.
  EncoderParameter encoderParameterInstance=new EncoderParameter(encoderInstance, 100L);
  encoderParametersInstance.Param[0]=encoderParameterInstance;
  encoderInstance=Encoder.ColorDepth;
  encoderParameterInstance=new EncoderParameter(encoderInstance, 24L);
  encoderParametersInstance.Param[1]=encoderParameterInstance;
}

MemoryStream ms = new MemoryStream();
resizedImage.Save(ms, codec, encoderParametersInstance);
0
ответ дан 4 December 2019 в 08:53
поделиться

Существует статья о CodeProject, описывающем улучшенный метод сглаживания:

http://www.codeproject.com/KB/GDI-plus/AntiAliasingIssues.aspx

0
ответ дан 4 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: