الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار عن الكتابه على الصور

بدأه 3mr في 6 فبراير 2013 · 7 رد · 1,368 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

 

حاليا اعمل على مشروع وهو برنامج طباعة كروت شخصيه وقمت بتنفيذ جزء كبير منه ولكن وجهاتنى مشكله 

المشكله هى انى الكرت بللغه العربية اى الكتابه  من اليمين الى اليسار  طبعا انا اريد مثلا الاسم يكتب بعد كلمة الاسم بأبعاد من اليمين الى اليسار على الصوره بحيث تكون بداية الاسم بعد كلمة الاسم: ولكن كما تعلمون الابعاد تبدأ من اعلى اليسار

 وهذه محاولتى

 

         front = new front();
            FrontImage = new Bitmap("Images/Front.jpg");
            FrontObj = Graphics.FromImage(FrontImage);
            // image width 410 
            // image hight 670
            
            FrontObj.DrawString(textBox1.Text, new Font("WinSoft Pro", 11), Brushes.DarkBlue, new Point(10, 436);
            FrontObj.DrawString(textBox2.Text, new Font("WinSoft Pro", 11), Brushes.DarkBlue, new Point(10, 473));
            FrontObj.DrawString(textBox3.Text, new Font("WinSoft Pro", 11), Brushes.DarkBlue, new Point(10, 503));
            
            front.panel1.BackgroundImage = FrontImage;
            front.BackgroundImageLayout = ImageLayout.Stretch;
            front.Show();


بعد تنفيذ هذا الكود يأتى الاسم بهذا الشكل

 

بعد تنفيذ هذا الكود يأتى الاسم بهذا الشكل

 

اقتباس

الاسم:                            عمرو عبده         

طبعا الكتابه تكون على الصوره بأبعاد من على اليسار 

 

ارجو الاهتمام شكرا

من طلب العلى سهر اليالى

#2

بصراحة لم أفهم شيء منك. إذا كانت مشكلتك بإتجاه النصّ فيمكنك جعل النصّ من اليمين لليسار بإستخدام StringFormat هكذا:

 

            string myString = "أبجد ABCD كلمة عربية";
            string fontName = "Arial";
            int fontSize = 11;

            Image image = Image.FromFile("image.png");
            Graphics graphics = Graphics.FromImage(image);

            StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft); // لجعل النصّ من اليمين لليسار
            SizeF size = graphics.MeasureString(myString, new Font(fontName, fontSize), image.Width, format); // للحصول على أبعاد النصّ

            int xPoint = (int) (image.Width + size.Width) / 2;
            int yPoint = (int) (image.Height - size.Height) / 2;

            graphics.DrawString(myString, new Font(fontName, fontSize), Brushes.DarkBlue, new Point(xPoint, yPoint), format);

            image.Save("image2.png");

 

النصّ "أبجد ABCD كلمة عربية". الصورة الأصلية:

 

imagejwif.png

 

الصورة الناتجة:

 

image2bn.png

 

يمكنك التحكم بموضوع النصّ بالتعديل في قيم xPoint و yPoint.

#3

لما لا تسخدم Crystal Reports 10 اسهل واسرع

#4
Mr.B كتب:

بصراحة لم أفهم شيء منك. إذا كانت مشكلتك بإتجاه النصّ فيمكنك جعل النصّ من اليمين لليسار بإستخدام StringFormat هكذا:

 

            string myString = "أبجد ABCD كلمة عربية";
            string fontName = "Arial";
            int fontSize = 11;

            Image image = Image.FromFile("image.png");
            Graphics graphics = Graphics.FromImage(image);

            StringFormat format = new StringFormat(StringFormatFlags.DirectionRightToLeft); // لجعل النصّ من اليمين لليسار
            SizeF size = graphics.MeasureString(myString, new Font(fontName, fontSize), image.Width, format); // للحصول على أبعاد النصّ

            int xPoint = (int) (image.Width + size.Width) / 2;
            int yPoint = (int) (image.Height - size.Height) / 2;

            graphics.DrawString(myString, new Font(fontName, fontSize), Brushes.DarkBlue, new Point(xPoint, yPoint), format);

            image.Save("image2.png");

 

النصّ "أبجد ABCD كلمة عربية". الصورة الأصلية:

 

imagejwif.png

 

الصورة الناتجة:

 

image2bn.png

 

يمكنك التحكم بموضوع النصّ بالتعديل في قيم xPoint و yPoint.

بكل بساطه نفترظ ان المتغير 20=xPoint والمتغير  50=yPoint  فى مثالك الذى وضعته

فهذا يعنى ان الكتابه سوف تكون بعيده من اليسار الى اليمين  ب20 بكسل وبعيده ومن فوق لتحت ب50 بكسل المطلوب تكون بعيده من اليمين الى اليسار

 

 

 

KARIMSOFT كتب:

لما لا تسخدم Crystal Reports 10 اسهل واسرع

 لم اصل اليه بعد :)

من طلب العلى سهر اليالى

#5

هل تقصد:
post-231926-0-82731200-1360283564_thumb.
بمعنى أنك تريد قلب نظام الإحداثيات فبدل أن تكون 20 من اليسار لليمين، تريدها 20 بكسل من اليمين لليسار؟ إن كان كذلك فكل مايلزمك أن تطرح النقطة وعرض الجسم من عرض الصورة (لن يهمك الإرتفاع لأنه سيكون واحد في كلا الحالتين).

مثلاً:

int rectWidth = 10;
int rectHeight = 10;

int xPoint = 20;
int yPoint = 45;

Image image = new Bitmap(200, 100); // 200x100 image
Graphics graphics = Graphics.FromImage(image);
graphics.FillRectangle(new SolidBrush(Color.GreenYellow), 0, 0, image.Width, image.Height);

// Object at (20, 45) from left to right
// المربع الأحمر موجود عند النقطة (20، 45) من اليسار لليمين
graphics.FillRectangle(new SolidBrush(Color.Red), xPoint, yPoint, rectWidth, rectHeight);

// Object at (170, 45) or (20, 45) from right to left
// المربع الأزرق موجود عند النقطة (170, 45) أو (20, 45) من اليمين لليسار
graphics.FillRectangle(new SolidBrush(Color.Blue), (image.Width - rectWidth - xPoint), yPoint, rectWidth, rectHeight);

image.Save("image.png");

post-231926-0-97585500-1360286034.png

يمكنك الحصول على عرض الصورة من الكائن Image.Width.

تم تعديل هذه المشاركة بواسطة Mr.B في 8 فبراير 2013 في 04:17

1
#6

هذا هو المطلوب بلتحديد ولكن الجسم هنا عباره عن كتابه (عربية) كيف لى ان اجد عرض الكتابه بلبكسل واسف على الاطاله شكرا

من طلب العلى سهر اليالى

#7

ارجو من الاخوه الرد

من طلب العلى سهر اليالى

#8

بعد البحث الحمد لله تم الحل لكى تعم الفائده على الجميع الداله MeasureString  تأتيك بعرض الكلمه بلبكسل وهذا مثال

SizeF text1px = FrontObj.MeasureString(textBox1.Text, new Font("WinSoft Pro", 11));

من طلب العلى سهر اليالى

مواضيع مشابهة