Çizim İşlemlerinde Yazı Ortalama
Çizim işlemleri yaparken resim üzerine veya pencereye çizeceğimiz yazıların yatay veya dikey olarak ortalanmasını isteyebiliriz. Ortalama işlemini yapmak için DrawString metoduna verilen ek bir parametre vermek gerekiyor. Bu parametre de StringFormat sınıfı türünden bir nesne olmalı.
StringFormat sınıfı yazıyı otomatik alt satıra kaydırma (wrap) ve ortalama (aligment) işlemleriyle ilgili özellikleri saklayan bir sınıftır. Bizi ilgilendiren özellikle Alignment özelliğidir. Bu özelliğe atanan StringAlignment enumunun değerine göre bir yaslama yapılır. Enum Near, Far ve Center olarak 3 değer taşır. Ortalama yapmak için Center değeri seçilmeli.
StringFormat strFrmt = new StringFormat(); strFrmt.Alignment = StringAlignment.Center;
Aşağıdaki uygulamada dinamik olarak hazırladığım bir resmin içerisine yazdığım yazıyı ortaladım ve ortaya çıkan resmi bir PictureBox içerisinde gösterdim. Resmin genişliği yazdığım yazıdan çok daha geniş olduğunda ortalama işleminin etkisini görebileceğiz. Ancak burada unutmamamız gereken nokta böyle bir durumda yazının çizilmeye başlanacağı (x,y) koordinatı yerine çizim alanının RectangleF türünden verilmesi gerekliliğidir. Bizim örneğimizde bu alaN metoda gönderilen resmin boyut değeri (PhysicalDimension) kullanılarak oluşturulmuştur.
Form1 Design :

Form1.cs :
using System.Drawing;
using System.Windows.Forms;
namespace CizimStringOrtalama
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//hazırlanan resmi picture box'ta gösterme
pict_orta.Image = OrtalanmisResimHazirla();
}
public Image OrtalanmisResimHazirla()
{
//400 piksel'e 200 piksel boyutlarında Bitmap oluşturma
Bitmap img = new Bitmap(400, 100);
//resmi üzerine yazı yazılması için yollama
YaziYaz(img);
return img;
}
public void YaziYaz(Image img)
{
//çizim işlemini yapacak grafik nesnesini oluşturma
Graphics grp = Graphics.FromImage(img);
//yazı fontu bilgileirni oluşturma
Font fnt = new Font("Verdana", 15);
//çizim işlemi için mavi renkli fırça hazırlama
SolidBrush brsh = new SolidBrush(Color.Blue);
//çizim yapılacak alanı belirleme. Bu alan resmin tüm genişliği ve yüksekliği olacaktır;
RectangleF alan = new RectangleF(new PointF(0, 0), img.PhysicalDimension);
//ASIL ORTALAMAYI BU KISIM YAPAR. STRINGFORMAT SINIFI STRING'IN NASIL SIĞDIRILACAĞI BİLGİSİNİ TAŞIR
StringFormat strFrmt = new StringFormat();
strFrmt.Alignment = StringAlignment.Center; //yazının yerleşiminin ortalanmasını istiyoruz
grp.DrawString("Yüce Çelikel", fnt, brsh, alan, strFrmt);
}
}
}
Bu uygulamanın çalıştırılması sonucu oluşan ekran görüntüsü ise şöyledir :

Görüldüğü gibi resim tüm sayfayı kaplamakta ancak yazı bu resmin ortasında çıkmaktadır. Aynı işlemi yatay değil de dikey eksende yapabilmek için bu sefer de LineAlignment özelliğine StringAligment enumu türünden bir Center değeri vermemiz yeterli olacaktır.
strFrmt.LineAlignment = StringAlignment.Center; //yazı yerleşimi dikey eksende ortalanır
Bu satırı kodlara eklememiz sonucu ortaya çıkan ekran görüntüsü ise şöyle olur :

Bir başka makalede görüşmek üzere.
Yüce ÇELİKEL
MCPD Enterprise Developer