PDA

View Full Version : سوال: نوشتن متن روی عکس



reza4344
چهارشنبه 11 دی 1392, 15:14 عصر
با سلام و خسته نباشید به همه دوستان

می خواستم در مورد قرار دادن یک متن دلخواه بر روی یک تصویر برام توضیح بدین

مثل کاری که تو برنامه paint میشه انجام داد

با سپاس

fmehrvarzi
چهارشنبه 11 دی 1392, 15:52 عصر
تو این لینک همراه با کد و عکس توضیحات کافی را آورده
C#‎‎ Snippet Tutorial - How to Draw Text on an Image (http://tech.pro/tutorial/654/csharp-snippet-tutorial-how-to-draw-text-on-an-image)

reza4344
چهارشنبه 11 دی 1392, 16:13 عصر
با تشکر از شما

همانطوری که خودتون هم مشاهده کردید امکان نوشتن به صورت دینامیک وجود نداره بلکه از قبل (یعنی تو کد) عبارت مورد نظر رو نوشته.... (my text)

من می خوام مثل paint هر جای عکس که خواستیم بتونیم هر جمله ای می خوایم بنویسیم..

با سپاس

hmbarnamenevis
چهارشنبه 11 دی 1392, 18:25 عصر
فکر کنم در لینک دوستمون و در تابع ذکر شده یک آرگومان بود که مختصات را مشخص می کرد شما می توانید از همان استفاده کنید.

fmehrvarzi
چهارشنبه 11 دی 1392, 22:02 عصر
با تشکر از شما

همانطوری که خودتون هم مشاهده کردید امکان نوشتن به صورت دینامیک وجود نداره بلکه از قبل (یعنی تو کد) عبارت مورد نظر رو نوشته.... (my text)

من می خوام مثل paint هر جای عکس که خواستیم بتونیم هر جمله ای می خوایم بنویسیم..

با سپاس

داداش فکر کردی paint چیکار میکنه؟
همین کارو میکنه !
شما میتونی هر جایی که خواستی متنت رو بنویسی !
کافیه تو رویداد کلیک بیای مختصات نقطه ای که کلیک شده را بگیری و بعدش بیای از همون کدها استفاده کنی
این دیگه به مهارت شما بستگی داره
اگر باز هم مشکل داشتی بگو تا کمکت کنم سوال دیگه ای ؟

fmehrvarzi
چهارشنبه 11 دی 1392, 22:20 عصر
برا مختصات پوزیشن کرسر
Cursor.Position
برا اطلاعات بیشتر به این لینک مراجعه کن:
http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.position.aspx

reza4344
پنج شنبه 12 دی 1392, 19:48 عصر
برا مختصات پوزیشن کرسر
Cursor.Position
برا اطلاعات بیشتر به این لینک مراجعه کن:
http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.position.aspx


مرسی بابت راهنمایی و لینک

اما من همون کدهایی که تو لینک بود و نوشتم ولی متاسفانه اصلا نمی تونم با cursor.position کار کنم! لینک msdn هم دیدم ولی مثالش تو این مورد کاربردی نیست شما می تونی با همون کدها برنامشو بنویسی ،یعنی رو هر نقطه از عکس که بخوام بتونم متن بنویسم!
خیلی روش کار کردم ولی به جواب نرسیدم

با سپاس

fmehrvarzi
جمعه 13 دی 1392, 19:01 عصر
بالاخره کدهاشو نوشتم :تشویق: ضمیمه کردم.:لبخند:
از لایبراری alphaBlendTextBox استفاده کردم( به منظور ایجاد تکست باکس شفاف)
خوشت اومد لایک یادت نره

reza4344
شنبه 14 دی 1392, 20:01 عصر
مرسی از لطفت برای اینکه وقت گذاشتی و این برنامه رو نوشتی تا نحوه کارو بفهمم:لبخندساده:
این تکنیک خیلی خوبه فقط چند تا پیشنهاد:

1- میشه اندازه textbox رو خودمون تعیین کنیم؟( یا موقع کشیدن textbox کادر معلوم باشه تا کجا کشیده میشه)
2-تو این برنامه به صورت عمودی نمیشه کادر کشید واسه اون کاری میشه کرد؟

reza4344
شنبه 14 دی 1392, 20:02 عصر
من بعضی قسمت هاشو نفهمیدم!یه خواهش داشتم میشه از اول بخش های مختلف رو یه توضیح اجمالی بدی برام



public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ZBobb.AlphaBlendTextBox abt ;
Graphics g;
Bitmap bm = global::BarnamenvisOrg3.Properties.Resources.wirel ess;
bool editmode = true ;
private void addTextBox()
{
abt = new ZBobb.AlphaBlendTextBox();
abt.BorderStyle = BorderStyle.FixedSingle;
abt.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)) )), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
abt.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
abt.ForeColor = System.Drawing.Color.White ;
abt.Multiline = true;
abt.Name = "alphaBlendTextBox2";
abt.Size = new System.Drawing.Size(146, 44);
abt.TabIndex = 0;
abt.Text = "";

panel1.Controls.Add(abt);
}

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
if (editmode)
{
addTextBox();
abt.Location = e.Location;
abt.Focus();

editmode = false ;
}
else
{
g = Graphics.FromImage(bm);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawString(abt.Text, new Font("Tahoma", 12), Brushes.White, abt.Location);
g.Flush();

panel1.BackgroundImage = bm;
abt.Dispose();
editmode = true;
}



با سپاس فراوان

fmehrvarzi
شنبه 14 دی 1392, 20:18 عصر
مرسی از لطفت برای اینکه وقت گذاشتی و این برنامه رو نوشتی تا نحوه کارو بفهمم:لبخندساده:
این تکنیک خیلی خوبه فقط چند تا پیشنهاد:

1- میشه اندازه textbox رو خودمون تعیین کنیم؟( یا موقع کشیدن textbox کادر معلوم باشه تا کجا کشیده میشه)
2-تو این برنامه به صورت عمودی نمیشه کادر کشید واسه اون کاری میشه کرد؟

اندازه تکس باکس هم با این کد میشه انجام داد
abt.Size = new System.Drawing.Size(146, 44);


تمام این کارهایی که میفرمائید رو میشه انجام داد ولی احتیاج به نوشتن کد هست، برا ایده گرفتن میتونی به خود برنامه paint مراجعه کنی
و به نظرم اگر WPF بلد باشید این جور کارها را بهتر میتوان انجام داد چون اونجا تکس باکست قابلیت های بیشتری داره (حتی برا شفاف شدن هم دستور داره)

fmehrvarzi
شنبه 14 دی 1392, 20:30 عصر
من بعضی قسمت هاشو نفهمیدم!یه خواهش داشتم میشه از اول بخش های مختلف رو یه توضیح اجمالی بدی برام
با سپاس فراوان
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ZBobb.AlphaBlendTextBox abt ;
Graphics g;
Bitmap bm = global::BarnamenvisOrg3.Properties.Resources.wirel ess;
bool editmode = true ;

// این تابع برای ایجاد یک تکس باکس شفاف و اضافه کردن آن به پنل ما
private void addTextBox()
{
abt = new ZBobb.AlphaBlendTextBox();
abt.BorderStyle = BorderStyle.FixedSingle;
abt.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)) )), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
abt.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
abt.ForeColor = System.Drawing.Color.White ;
abt.Multiline = true;
abt.Name = "alphaBlendTextBox2";
abt.Size = new System.Drawing.Size(146, 44);
abt.TabIndex = 0;
abt.Text = "";

panel1.Controls.Add(abt);
}

private void panel1_MouseClick(object sender, MouseEventArgs e)
{

if (editmode)// اگر حالت ویرایش فعال بود تکس باکس را اضافه کن و موقعیتش را به موقعیت کلیک موس قرار بده و بعد فوکس کن روش و بعد حالت ویرایش را روی فالس قرار بده
{
addTextBox();
abt.Location = e.Location;
abt.Focus();

editmode = false ;
}
else// و در صورتی که بیرون تکس باکس ایجاد شده کلیک شود یعنی حالت ویرایش فعال نباشد بیا این کارها را انجام بده
{
// شی گرافیکی را از فایل بیت مپ ایجاد کن و بعدش متن داخل تکس باکسی که در حالت بالا بعد از فوکوس نوشت را بروی تصویر مان قرار بده و درنهایت بک گراند پنل قرار بده
g = Graphics.FromImage(bm);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawString(abt.Text, new Font("Tahoma", 12), Brushes.White, abt.Location);
g.Flush();

panel1.BackgroundImage = bm;
//شی تکس باکس ایجاد شده را نابود ش کن
abt.Dispose();
// حالت ویرایش را ترو کن
editmode = true;
}

reza4344
یک شنبه 15 دی 1392, 11:02 صبح
با سپاس از شما دوست عزیز