【发布时间】:2010-11-23 18:37:13
【问题描述】:
我们有一段代码可以将 .Net System.Drawing.Bitmap 保存到文件中。 Save 调用指定了文件位置以及我们期望将图像数据保存为 Jpeg 的 ImageFormat,因此代码如下所示:
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 媒体服务)的问题。
感谢您的帮助,有人见过吗?
注意: 完整路径类似于“\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 方法中。
-
问题不在您发布的代码中。如果你可以发布一个单独编译的类并且可以重现行为,我会再看一次......在反射器中查看 Image 类时,有一些路径看起来很奇怪(比如原始格式的缓存图像和一些技巧,以便在某些情况下原始格式从 jpeg 切换到 png),但是当新生成的图像只保存一次时,它们都无法解释问题......