2013-02-12 4 views
1

Мой простой код выводит меня из этого PNG enter image description here в этот GIF enter image description here, что неприемлемо. Я знаю, что GIF - это не лучший формат, но я должен соответствовать нынешней ситуации.Сохранение PNG как GIF с .NET выглядит ужасно пятнистым

Imports System.Drawing 
Dim oImage As Image = Image.FromFile("c:\whatever\temp.png") 
oImage.Save("c:\whatever\temp.gif", Imaging.ImageFormat.Gif) 

Я также хочу изменить размер изображения (немного уменьшить его), но это выглядит еще хуже. Я предполагаю, что мне нужно что-то сделать с цветовой палитры, кодеры, режим P против RGBA ..... но мой Google-fu кажется совершенно слабым, и я ничего не нашел!

Если кто-нибудь может указать на мою глупость с помощью некоторых удобных VB.NET или C#, которые были бы замечательными, спасибо.

+0

Не уверен, если это поможет, но, возможно, дующий изображение вверх (как можно раньше) может улучшить результат? –

ответ

4

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

Для этого есть отличная статья (содержащая код) here. Захватите OctreeQuantizer, а затем это так просто, как пример кода:

var quantizer = new OctreeQuantizer(255, 8); 
    using (var quantized = quantizer.Quantize(image)) 
    { 
     quantized.Save(target, ImageFormat.Gif); 
    } 
+0

Спасибо. Удивительно, как писать GIF требует 200 строк кода, а BMP, JPG, PNG нужно всего 2! –

2

Вам нужно будет найти оптимизированную палитру изображений для входного изображения.

здесь смотрите: http://msdn.microsoft.com/en-us/library/aa479306.aspx

NB: Я знаю, что вы ищете ответ на основе .NET, но он все еще может быть стоит проверить ImageMagic. Это дает вам большой контроль над вариантами преобразования. Есть даже .NET-обертка, хотя я не использовал ее лично: http://imagemagick.codeplex.com/

Смежные вопросы