Люди ленивы и только принимают изменение при принуждении к.
Я сам нашел ответ. Это связано с цветовыми профилями, которые по умолчанию не применяются в GDI +. Многие утверждают, что вы не можете автоматически применять цветовые профили с помощью GDI, но, видимо, единственное изменение, которое мне нужно было сделать, это следующее:
using (var original = System.Drawing.Image.FromStream (new MemoryStream (image.RawData) ))
-
с использованием (var original = new Bitmap (new MemoryStream (image.RawData), true))
Очевидно, Bitmap был производным классом Image, а конструктор Bitmap может принимать как stream, а также логическое значение для useIcm. Это помогло мне.
У меня есть код изменения масштаба изображения, который я использую, и я не вижу эффекта, который вы упомянули.
основное различие, которое я вижу, заключается в том, что я использую Format24bppRgb, а не Format24bpp A Rgb
Имейте в виду, что JPG все равно не имеет альфа-канала (afaik)
Был там, сделал это. Как бы глупо это ни звучало, это имеет значение:
var quality = 95;
var myEncoderParameter = new EncoderParameter( Encoder.Quality, (long)quality );
,
long quality = 95;
var myEncoderParameter = new EncoderParameter( Encoder.Quality, quality );
или
var quality = 95L;
var myEncoderParameter = new EncoderParameter( Encoder.Quality, quality );
Просто выберите один.
Если взглянуть на это под другим углом, я настоятельно рекомендую ImageResizer , если вы хотите избавиться от этой боли самостоятельно. Он даже заботится о кэшировании диска.