2010-10-07 325 views
1

我需要简单易学的&快速方法从背景图像,文本生成图像,然后保存为JPEG格式。图像处理

你可以建议什么?任何图书馆或教程?重要的标准是简单。

+0

你是什么意思的“背景图像,文字图像”?截图? – bitbonk 2010-10-07 09:36:46

回答

4

我通常使用GDI+来做到这一点。有很多在网上对这个教程,但基本上你需要做的是这样的:

using(Image image = new Bitmap(Width, Height)) 
using (Graphics g = Graphics.FromImage(image)) { 
    g.Draw.... 
    g.Draw.... 
    image.Save(filename, ImageFormat.Jpeg); 
} 

Draw....的调用可以绘制图元,图像,文字等。

还记得那是文字看起来锯齿状,你有Graphics对象的方法来平滑这一点。在这种情况下,g.TextRenderingHint = TextRenderingHint.AntiAlias;

还有其他选项可以让它看起来更好,如果你觉得它是锯齿状的。默认设置是针对性能而不是质量,所以如果您想要高质量,则需要自行设置。 g.SmoothingMode设置为例如HighQuality将使您的圆形图元看起来比默认配置更平滑。

它非常易于使用,并且使最终图像看起来像您想要的样子,所以试试吧!

+0

如果事情看起来块状,请在JPEG保存上设置更高的质量 – Will 2010-10-07 09:09:36

0

GDI +和System.Drawing命名空间是做你想做的事情所需要的。一个基本的例子是低于但也有在网络上的资源,详细说明更多先进的功能:

using(Bitmap myBitmap = new Bitmap("C:\\backgroundImage.jpg")) 
using(Graphics g = Graphics.FromImage(myBitmap)) 
{ 
    g.DrawString("Text", new Font("Arial", 10), Brushes.White, new PointF(0, 0)); 
    myBitmap.Save("C:\\newImage.jpg"); 
} 
+0

您应该始终处理GDI +对象,例如使用“using”结构。不这样做可能会导致摊位。 – Skrim 2010-10-07 09:27:14

+0

-1:这并没有增加我在几分钟前发布的答案,此外还省略了处理Skrim也评论过的至关重要的GDI +对象。 – 2010-10-07 10:08:28

+0

@Øyvind当你最初发布你的答案时,你没有包括任何有关添加指定的问题的文本。为什么这么意思? – 2010-10-07 10:16:33

6
在.net

3.5/4,你还可以使用WPF/Media.Imaging作为替代GDI +

首先创建一个DrawingVisualDrawingContext

DrawingVisual visual = new DrawingVisual(); 
DrawingContext dc = visual.RenderOpen(); 

上再画的东西:

dc.DrawRectangle(...); 
dc.DrawText(...); 
etc... 

请务必关闭它:

dc.Close(); 

有关WPF的最大好处是一切都在GUI实际上是视觉,所以,如果你愿意,你不必使用上面的代码编程画画,你实际上可以在窗口中用xaml构建你的视觉效果,然后直接渲染到RenderTargetBitmap

一旦你建立你的视觉,你可以使它对使用编码器(.Net有编码器用于JpegPngBmpGifTiffWmp)的文件。

// Create a render target to render your visual onto. The '96' values are the dpi's, you can set this as required. 
RenderTargetBitmap frame = new RenderTargetBitmap((int)visual.ContentBounds.Width, (int)visual.ContentBounds.Height, 96, 96, PixelFormats.Pbgra32); 
frame.Render(visual); 

// Now encode the rendered target into Jpeg and output to a file. 
JpegBitmapEncoder jpeg = new JpegBitmapEncoder(); 
jpeg.Frames.Add(BitmapFrame.Create(frame)); 
using (Stream fs = File.Create(@"c:\filename.jpg")) 
{ 
    jpeg.Save(fs); 
} 

有一些很好的MS教程上Drawing ObjectsWPF Graphics Rendering

+0

优秀资源,谢谢 – 2010-12-16 22:17:30