Ваш код не делает то, что вы думаете, что он делает ...
Вы используете GetThumbnailImage, чтобы изменить размер изображения, затем вы рисуете миниатюрное изображение в себе, что довольно бессмысленно. Вы, вероятно, потеряете прозрачность на первом этапе.
Вместо этого создайте пустое растровое изображение и измените размер исходного изображения, нарисовав его на пустом растровом изображении.
private byte[] GetThumbNail(string imageFile) {
try {
byte[] result;
using (Image thumbnail = new Bitmap(160, 59)) {
using (Bitmap source = new Bitmap(imageFile)) {
using (Graphics g = Graphics.FromImage(thumbnail)) {
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(source, 0, 0, 160, 59);
}
}
using (MemoryStream ms = new MemoryStream()) {
thumbnail.Save(ms, ImageFormat.Png);
thumbnail.Save("test.png", ImageFormat.Png);
result = ms.ToArray();
}
}
return result;
} catch (Exception) {
throw;
}
}
(Я удалил некоторые параметры, которые никогда не использовались для чего-либо, что имело какое-либо отношение к результату, например параметр imageLen, который использовался только для создания байтового массива, который никогда не использовался.)