2010-10-07 6 views
1

Мне нужно прост в освоении & быстрый способ генерации изображения из фонового изображения, текстов и после этого сохранения в формате JPEG.Обработка изображений

Что вы можете предложить? Любая библиотека или учебник по этому вопросу? Важными критериями являются простота.

+0

Что вы подразумеваете под «изображением из фонового изображения, текстами»? Скриншоты? – bitbonk

ответ

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

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

+0

-1: Это ничего не добавляет к моему ответу, который был опубликован несколькими минутами ранее, и, кроме того, опускает удаление объектов GDI +, которые жизненно важны, поскольку Skrim также прокомментировал. –

+0

@ Øyvind, когда вы изначально отправили свой ответ, вы не указали ничего о добавлении текста, который был указан в вопросе. Почему так значит? –

6

в .NET 3.5/4 вы можете также использовать WPF/Media.Imaging в качестве альтернативы GDI +

Сначала создайте DrawingVisual и DrawingContext:

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

Затем нарисуйте материал на нем:

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

Убедитесь, что вы его закрыть:

dc.Close(); 

Самое замечательное в WPF есть все в GUI на самом деле визуальный тоже, так что если вы предпочитаете вы не должны использовать код выше, чтобы сделать программно, вы может на самом деле создать ваш визуал в xaml на окне, а затем просто сделать это прямо на RenderTargetBitmap.

После того, как вы создали ваш визуальный вы можете сделать его в файл, используя кодировщик (.Net имеет кодеры для Jpeg, Png, Bmp, Gif, Tiff и Wmp).

// 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 Objects и WPF Graphics Rendering.

+0

отличные ресурсы, спасибо –

0

Вместо старого старого GDI + вы можете использовать более современные (и часто быстрее) API-интерфейсы System.Windows.Media.Imaging.

Смежные вопросы