Сайт для программистов

суббота, 14 февраля 2009 г.

Создание кружочков с цифрами без Photoshop

Сегодня в рассылке VB Helper Newsletter (http://www.vb-helper.com/) прочитал, как автор рассылки создавал специальные картинки для иллюстрации к своим книгам или статьям. Картинки представляют собой маленькие кружочки с цифрами внути. Подобные картинки обычно размещают для показа последоватьельности действий. Например, установите текст в текстовом поле (рис.1), нажмите на кнопку Далее (рис.2) и тому подобное. Безусловно, подобные вещи можно сделать в фотошопе и другом графическом редакторе. Но программисты не ищут легких путей. Гораздо интереснее самому генерировать картинки. Хотя, если серьезно, пример обладает определенным потенциалом для изучения техники работы с графикой, а также может послужить отправной точкой для создания других интересных вещей, например, генерирование лотерейных шаров с номерами.



Пример я портировал с Visual Basic на C#. Желающие ознакомиться с исходниками на VB, могут скачать пример с http://www.vb-helper.com/HowTo/howto_2005_make_number_icons.zip.



Привожу пример на C#. Одно маленькое замечание: в первоисточнике использовался цикл for для генерации десяти кружочков с цифрами от 0 до 9. Я ограничился одной цифрой 1.




const int WID = 24;



string base_path = @"e:\down\"; // ваш путь к папке



Font the_font = new Font("Arial", 10, FontStyle.Bold);



Bitmap bm = new Bitmap(WID,WID);



Graphics gr = Graphics.FromImage(bm);



gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;

gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

gr.Clear(Color.White);



Rectangle layout_rectangle = new Rectangle(0, 0, WID - 1, WID - 1);



using (LinearGradientBrush br = new LinearGradientBrush(layout_rectangle,

Color.White,Color.Blue,

LinearGradientMode.ForwardDiagonal))

{

gr.FillEllipse(br,layout_rectangle);

gr.DrawEllipse(Pens.Blue, layout_rectangle);

}



StringFormat string_format = new StringFormat();

string_format.LineAlignment = StringAlignment.Center;

string_format.Alignment = StringAlignment.Center;

gr.DrawString("1",the_font,Brushes.White,layout_rectangle,string_format);

bm.Save(base_path + "1" + ".bmp",System.Drawing.Imaging.ImageFormat.Bmp);



MessageBox.Show("Готово");




Кстати, сегодня День святого Валентина. Поздавляю всех романтичных котиков и кошечек )))



Комментариев нет: