PDA

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



qasemf
پنج شنبه 05 خرداد 1401, 13:30 عصر
سلام وقتتون بخیر
دوستان من یه pictureBox1 تو برنامم دارم و میخوام روی هر نقطه از این pictureBox1 که کلیک کردم ، روی همون نقطه بتونم متن تایپ کنم
چطوری میتونم این کار رو انجام بدم

mmbguide
جمعه 06 خرداد 1401, 23:12 عصر
سلام


https://stackoverflow.com/questions/18040945/read-picture-box-mouse-coordinates-on-click

حالا که موقعیت را بدست آوردید میتونید از کلاس Drawing اقدام به رسم متن روی تصویر کنید. البته باید یک شیء گرافیک از تصویر مورد نظر ایجاد کنید و رسم متن را روی آن گرافیک انجام دهید و...

https://stackoverflow.com/questions/6311545/c-sharp-write-text-on-bitmap

qasemf
شنبه 07 خرداد 1401, 13:31 عصر
سلام


https://stackoverflow.com/questions/18040945/read-picture-box-mouse-coordinates-on-click

حالا که موقعیت را بدست آوردید میتونید از کلاس Drawing اقدام به رسم متن روی تصویر کنید. البته باید یک شیء گرافیک از تصویر مورد نظر ایجاد کنید و رسم متن را روی آن گرافیک انجام دهید و...

https://stackoverflow.com/questions/6311545/c-sharp-write-text-on-bitmap


ممنونم از پاسختون فقط دو تا مورد هست
اول اینکه روی هر نقطه که کلیک میکنم اون متن با اختلاف در قسمت های بالا سمت چپ نقطه ای که کلیک میکنم نمایان میشه !!!! نه در نقطه ای کلیلک کردم


private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
MouseEventArgs me = (MouseEventArgs)e;
Point coordinates = me.Location;
// MessageBox.Show(me.Location.ToString());
string s = "jjjjjjjjj";
Bitmap bmp = new Bitmap(pictureBox1.Image);

RectangleF rectf = new RectangleF(me.X, me.Y,90, 50);

Graphics g = Graphics.FromImage(bmp);

g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.DrawString(s,new Font("Tahoma", 30), Brushes.Black, rectf);

g.Flush();
pictureBox1.Image = bmp;
// image.Image = bmp;

}


مورد دوم اینکه من میخوام روی هر نقطه که کلیلک کردم مثل فتوشاپ اون نشانه گر موس شکلش عوض بشه و متن دلخواهمو تایپ کنم الان اگر بخوام متن رو از ورودی دریافت کنم میشه در همین متد کلیک picturebox اون ورودی رو دریافت کرد یا باید از متد دیگه ای استفاده کرد؟

mmbguide
یک شنبه 08 خرداد 1401, 23:30 عصر
مورد اول:
کدها خود شما را امتحان کردم و مشکلی وجود نداشت. شما در تعیین موقعیت متن بجای استفاده از me از coordinate استفاده کنید و اگر هر قصد استفاده از me را دارید میتوانید coordinate ار حذف کنید. شما در خصوص تعیین موقعیت چه چیزی را مد نظر دارید. میخواهید محل کلید مرکز متن باشه؟ سمت چپ وسط باشه؟ و... برای هر یک از موارد باید از موقعیت X و Y به انداره دلخواه کسر و یا اضافه کنید. اگر لازم شد که قبل از رسم متن روی یک تصویر طول آن را داشته باشید باید از متد MeasureString استفاده کنید:

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.graphics.measurestring?view=dotnet-plat-ext-6.0

مورد دوم:
امکاناتی که کلاس های موجود در دات نت به شما میدهند عمکردهای پایه و اساسی هستند و برای ایجاد چنین چیزی خودتان باید کنترلرهای مخصوص ایجاد کنید. یکی از پیشنهادات این هستش که بجای رسم متن، ابتدا یک کنترلر مخصوص ایجاد کنید و در واقع بجای رسم متن یک Control به PictureBox اضافه کنید که به نوعی متن مودر نظر را در موقعیت کلیک شده نمایش بدهد و در انتها متوانید داده های موجود از کنترلرهای اضافه شده در PictureBox را رسم کنید و بعد تصویر را ذخیره کنید. یا هر چیزی شبیه به این الگو

qasemf
چهارشنبه 11 خرداد 1401, 09:54 صبح
مورد اول:
کدها خود شما را امتحان کردم و مشکلی وجود نداشت. شما در تعیین موقعیت متن بجای استفاده از me از coordinate استفاده کنید و اگر هر قصد استفاده از me را دارید میتوانید coordinate ار حذف کنید. شما در خصوص تعیین موقعیت چه چیزی را مد نظر دارید. میخواهید محل کلید مرکز متن باشه؟ سمت چپ وسط باشه؟ و... برای هر یک از موارد باید از موقعیت X و Y به انداره دلخواه کسر و یا اضافه کنید. اگر لازم شد که قبل از رسم متن روی یک تصویر طول آن را داشته باشید باید از متد MeasureString استفاده کنید:

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.graphics.measurestring?view=dotnet-plat-ext-6.0

مورد دوم:
امکاناتی که کلاس های موجود در دات نت به شما میدهند عمکردهای پایه و اساسی هستند و برای ایجاد چنین چیزی خودتان باید کنترلرهای مخصوص ایجاد کنید. یکی از پیشنهادات این هستش که بجای رسم متن، ابتدا یک کنترلر مخصوص ایجاد کنید و در واقع بجای رسم متن یک Control به PictureBox اضافه کنید که به نوعی متن مودر نظر را در موقعیت کلیک شده نمایش بدهد و در انتها متوانید داده های موجود از کنترلرهای اضافه شده در PictureBox را رسم کنید و بعد تصویر را ذخیره کنید. یا هر چیزی شبیه به این الگو


عزیز مورد اول کماکان حل نشده!!! اره من میخوام دقیقا روی هر نقطه که کلیک کردم متن همونجا ظاهر بشه حالا چطوری موقعیت xو y رو کم یا زیاد کنم؟
بابت مورد دوم هم ممنون چون بهترین راه همینه مطمئنا

mmbguide
چهارشنبه 11 خرداد 1401, 18:52 عصر
ابتدا یک تصویر از نتیج کار بذارید تا متوجه بشم منظورتان چیه چون کدهای بالا داره تو سیستم من درست کار میکنه. برای کم کردن مقدار x و y باید عملیات ساده جمع و تفریق رو انجام بدید. مثلا x - 50

qasemf
پنج شنبه 12 خرداد 1401, 05:48 صبح
ابتدا یک تصویر از نتیج کار بذارید تا متوجه بشم منظورتان چیه چون کدهای بالا داره تو سیستم من درست کار میکنه. برای کم کردن مقدار x و y باید عملیات ساده جمع و تفریق رو انجام بدید. مثلا x - 50
بعد از اینکه شما گفتین تو سیستم شما کدها درست کار میکنند، متوجه شدم که خاصیت sizemode پیکچرباکس رو گذاشتم روی stretch چون سایز عکسها باید با پیکچرباکس fit میشد، این کار رو کرده بودم اما مشکل دقیقا همینجا بود!!!! حالا که sizemode رو گذاشتم روی حالت normal یا autosize این مشکل رفع میشه اما نمایش عکسها جالب در نمیاد چون ابعاد عکسها از ابعاد پیکچر باکس بیشتر هست این اتفاق رخ میده حالا به نظر شما باید چکاری انجام بدم؟

mmbguide
پنج شنبه 12 خرداد 1401, 08:58 صبح
برای اینکه بتونبد تصاویر بزرگ را در PictureBox اسکرول کنید باید این کار را انجام بدید:

ابتدا یک Panel در فرم قرار بدید و اندازه اون را هر طور که مد نظر هست تنظیم کنید و ویژگی AutoScroll را true تنظیم کنید.
کنترل PictureBox را داخل Panel قرار بدید و ویژگی SizeMode را AutoSize تنظیم کنید.


با این کار میتونید تصاویر بزرگ را در یک ابعاد کوچک Scroll کنید

153808