У нас есть фрагмент кода, который сохраняет файл .Net System.Drawing.Bitmap в файл. Сохранить вызов указать местоположение файла, а также ImageFormat, которые мы ожидаем, чтобы сохранить данные изображения в Jpeg так из кода выглядит следующим образом:Bitmap Сохранить в .Net сохраняет изображение в неправильном формате?
public MediaFile IngestImage(System.Drawing.Bitmap imgSrc, string name){
... // left out because it is not relevant to this question
imgSrc.Save(fullPath, System.Drawing.Imaging.ImageFormat.Jpeg);
... // left out because it is not relevant to this question
}
По какой-то причине, то и этот метод генерирует PNG изображений как .jpg файлов. В большинстве случаев это не большая проблема, однако в другой части проекта возникают проблемы с тем, что эти файлы не являются фактическими jpeg (службами Windows Media).
Любая помощь приветствуется, кто-нибудь когда-либо видел это?
Примечание: полный путь - это что-то вроде «\ servcer \ share \ file.jpg». Мы сохраняем jpg с расширением «jpg». Следовательно, проблема ... Позже мы создаем точки публикации на Windows Media Server для воспроизведения плейлиста SMIL, после чего мы должны «Объявлять» файлы и форматы в точке публикации, когда точка публикации начинает воспроизводить ее, ожидает, что файл Jpg будет является расширение файла и содержание фактически PNG
Вот фактический код создания объекта BitpMap, который передается в указанный выше метод ...
public static Bitmap CreateBitmap(string text, int height, int width, Color foregroundColor, Color backgroundColor, string fontName, int fontSize, bool antialias)
{
// Initialize graphics
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(bmp))
{
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
//g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
if (antialias)
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.TextRenderingHint = TextRenderingHint.AntiAlias;
}
// Set colors
SolidBrush fgBrush = new SolidBrush(foregroundColor);
SolidBrush bgBrush = new SolidBrush(backgroundColor);
// paint background
RectangleF rectF = new RectangleF(0, 0, width, height);
g.FillRectangle(bgBrush, rectF);
// Load font
FontFamily fontFamily = FontFamily.GenericSerif;
Font font = new Font(fontFamily, fontSize, FontStyle.Regular, GraphicsUnit.Pixel);
try
{
fontFamily = new FontFamily(fontName);
font = new Font(fontFamily, fontSize, FontStyle.Regular, GraphicsUnit.Pixel);
}
catch { }
// Set font direction & alignment
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
// Finally, draw the text
g.DrawString(text, font, fgBrush, rectF, format);
return bmp;
}
}
Можете вставить еще немного кода? Я думаю, что проблема заключается либо в методе, который вызывает CreateBitmap, либо в методе IngestImage. – Badaro
проблема не в коде, который вы отправили. Если вы можете опубликовать один класс, который компилируется в одиночку и может воспроизводить поведение, я снова посмотрю ... Есть несколько путей, которые выглядят странно при просмотре класса Image в отражателе (например, кэширование необработанный формат изображения и некоторые хаки, так что в некоторых случаях необработанный формат переключается с jpeg на png), но ни один из них не может объяснить проблемы, когда только что сгенерированное изображение сохраняется только один раз ... – mihi