Почему прозрачные пиксели отображаются черным на моем изображении? - PullRequest
1 голос
/ 01 июня 2010

Я сохраняю массив байтов изображения в качестве эскиза. Проблема в том, что на моем изображении прозрачный фон - черный.

Ниже мой код:

MemoryStream memoryStream = new MemoryStream(pbytImageByteArray);

System.Drawing.Image imgImageSource = System.Drawing.Image.FromStream(memoryStream);

double dblOrgnWidth = imgImageSource.Width;
double dblOrgnHeight = imgImageSource.Height;

double dblRatio = (dblOrgnWidth / dblOrgnHeight) * 100;

double dblScaledWidth = pintWidth;
double dblScaledHeight = 0;

dblScaledHeight = (dblScaledWidth / dblRatio) * 100;
System.Drawing.Bitmap bitmapImage = new System.Drawing.Bitmap(System.Convert.ToInt32(dblScaledWidth), System.Convert.ToInt32(dblScaledHeight));

bitmapImage.SetResolution(imgImageSource.HorizontalResolution, imgImageSource.VerticalResolution);
System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmapImage);
graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;            
ImageAttributes imageAttributes = new ImageAttributes();            
graphics.DrawImage(imgImageSource, new System.Drawing.Rectangle(0, 0, System.Convert.ToInt32(dblScaledWidth), System.Convert.ToInt32(dblScaledHeight)), 0, 0, System.Convert.ToInt32(dblOrgnWidth), System.Convert.ToInt32(dblOrgnHeight), System.Drawing.GraphicsUnit.Pixel);

MemoryStream outputMemoryStream = new MemoryStream();
bitmapImage.Save(outputMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
bitmapImage.GetThumbnailImage(System.Convert.ToInt32(dblScaledWidth), System.Convert.ToInt32(dblScaledHeight), null, IntPtr.Zero);
imgImageSource.Dispose();
bitmapImage.Dispose();
graphics.Dispose();
return outputMemoryStream.ToArray();

1 Ответ

0 голосов
/ 01 июня 2010

JPEG не поддерживает прозрачность. Сохранить как PNG.

В качестве альтернативы, если вы знаете цвет фона, на котором это будет, вы можете установить прозрачные пиксели на этот цвет. Если вы используете полупрозрачные пиксели, вам придется смешивать пиксели с этим цветом.

Вот статья, которая объясняет альфа-смешение:

http://www.c -sharpcorner.com / UploadFile / Махеш / DrawTransparentImageUsingAB10102005010514AM / DrawTransparentImageUsingAB.aspx

Если вы заинтересованы в коммерческом решении для этого (Отказ от ответственности: я работаю на Atalasoft), DotImage Photo имеет класс FlattenAlphaCommand, который может сделать это в несколько строк кода.

...