PDA

View Full Version : ایجاد bitmap font از قلم فارسی



mehdico
سه شنبه 17 مرداد 1391, 19:25 عصر
سلام دوستان عزیز،

من به مشکلی برخوردم و چند سوال دارم :

توی پروژه جدیدم نیاز دارم تا یه فونت فارسی رو به صورت bitmap دربیارم طوری که تمام کارکترهای فارسی مورد نظرم به همراه شکل های مختلف هر کاراکتر (مثلا ت تـ ـتـ ـت) رو داشته باشم. برای این کار من هر کاراکتر رو با دستور زیر معرفی می کنم :
System.Text.RegularExpressions.Regex.Unescape("\u0628")
بعد اونرو با DrawString روی یه بیتمپ میکشم و با یه الگوریتم width تصویر کارکترم توی اون بیتمپ رو بدست میارم (چون مشخصات موقعیت و همچنین عرض هر کارکتر رو نیاز دارم تا بعدا توی یه برنامه دیگه بتونم از این مشخصات استفاده کنم تا این کارکتر رو از بیتمپ فراخوانی و چاپ کنم).

اما چون کدهای کارکترهای چند حالتی مثل ت یک کد بیشتر نیست باید برای هر کاراکتر این جوری یه چیزی بهش بچسبونم (مثلا کاراکتر کشیدگی) تا به حالت مورد نظرم دربیاد. اینجوری( ـت ) اما خوب می بینیم که کاراکتر اتصال (یا ـ) خودش یه عرض داره که شکل رو دچار مشکل میکنه!
System.Text.RegularExpressions.Regex.Unescape("\u0640") + System.Text.RegularExpressions.Regex.Unescape("\u0628")

آیا کارکتری هست که بتونم بدون تغییر قبل و یا بعد از حروف چندحالته قرارش بدم تا شکلشون عوض بشه؟ من کاراکتر اتصال مجازی رو استفاده کردم ولی جواب نداد.

در کل اگه راه بهتری برای ایجاد بیتمپ فونت به نظرتون میرسه لطفا کمکم کنید.

the king
سه شنبه 17 مرداد 1391, 23:00 عصر
فراموش نکنید که چه هنگام رسم متن و چه هنگامی که می خواهید با MeasureString ابعاد نوشته رو بدست بیاورید حتما
StringFormat رو تنظیم و مشخص کنید چون در نتیجه تاثیر زیادی داره. کاراکتر بدی رو انتخاب کرده بودید وگرنه اساس همانی است
که می خواهید انجام بدهید :

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim teh As Char = ChrW(&H62A)
Dim joiner As Char = ChrW(&H200D)
Dim nonJoiner As Char = ChrW(&H200C)
Dim rightJoinerTeh As String = joiner + teh
Dim leftJoinerTeh As String = teh + joiner
Dim leftRightJoinerTeh As String = joiner + teh + joiner
Dim nonJoinerTeh As String = teh
Dim font As New Font("Tahoma", 20, FontStyle.Regular, GraphicsUnit.Pixel)
Dim format As New StringFormat
format.FormatFlags += StringFormatFlags.DirectionRightToLeft
format.Alignment = StringAlignment.Far
e.Graphics.DrawString(rightJoinerTeh, font, Brushes.Black, 10, 10, format)
e.Graphics.DrawString(leftRightJoinerTeh, font, Brushes.Black, 50, 10, format)
e.Graphics.DrawString(leftJoinerTeh, font, Brushes.Black, 90, 10, format)
e.Graphics.DrawString(nonJoinerTeh, font, Brushes.Black, 130, 10, format)
End Sub