PDA

View Full Version : سوال: نحوه ترسیم یک خط روی فرم



mostafaserial
چهارشنبه 04 فروردین 1389, 18:47 عصر
با سلام و تبريك سال نو به اعضاي سايت خوب برنامه نويس
من يه برنامه ساده نقاشي كه فقط يه صفحه سفيد باشه و يه قلم ميخوام تا فقط داخلش خط رسم كنم و بعد به صورت عكس ذخيره كنم .كسي سراغ داره اين برنامه رو ؟ لطفا كمك كنين.
راستي هدف من اينه يه روبات در حال راه رفتنه و من 2 تا مقدار x,y ازش دارم ميخوام با توجه به حركت روبات مثل يه قلم نقاشي مسير حركتشو روي يه صفحه رسم كنم
ممنون

Shahram_Shobeiri
چهارشنبه 04 فروردین 1389, 21:06 عصر
برای این کار می تونی از دستور رسم خط استفاده کنی. برای رسم خط از دستورات زیر استفاده کن

Dim line As Graphics
line = Graphics.FromImage(Img)
line.DrawLine(Pen, x1, y1, x2, y2)img یه bitmat ساده است با زمینه یکدست سفید یا هر رنگ دیگه که طول و عرض اون با طول و عرض محیطی که ربات روی اون حرکت می کنه یکیه.
باید این عمل رو در یک دوره زمانی مشخص تکرار کنی.

mostafaserial
چهارشنبه 04 فروردین 1389, 23:16 عصر
ممنون
ميشه با يه مثال كامل بزارين؟

mostafaserial
پنج شنبه 05 فروردین 1389, 11:22 صبح
سلام
كسي نيست جواب رو كامل كنه ؟

Shahram_Shobeiri
شنبه 07 فروردین 1389, 08:44 صبح
منظورتون رو از مثال کامل نمی فهمم. الگوریتم کار اینطوریه :
- روبات رو به هر طریقی (مثلاً با آی سی MAX232 از طریق پورت کام) به کامپیوتر وصل می کنید.
- بعد یک شی از نوع پورت کام تعریف می کنید(جزئیات تبادل داده از طریق پورت که در برنامه میکرو ست کردید رو به پورت تعریف شده در برنامه vb.net نسبت می دهید)

My.Computer.Ports.OpenSerialPort("COM1", 19200, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
- بعد اطلاعات رو بصورت دوره ای از این پورت می خوانید، تفکیک می کنید و عملیات رسم نقطه روی بیت مپ رو انجام می دهید.
برای ساختن یک بیت مپ با زمینه سفید و طول و عرض مشخص می توانید از متد زیر استفاده کنید :

Private Function Bitmap_Generator(ByVal _Width As Int16, ByVal _Height As Int16) As Drawing.Bitmap
Dim bmp As New Drawing.Bitmap(_Width, _Height, Drawing.Imaging.PixelFormat.Format16bppRgb555)
For i As Int16 = 0 To _Width - 1
For j As Int16 = 0 To _Height - 1
bmp.SetPixel(i, j, Color.White)
Next
Next
bmp.SetPixel(0, 0, Color.White)
Return bmp
End Function
به همین روش (استفاده شده در متد فوق) هم می تونید روی بیت مپ نقطه گذاری کنید.
بازم اگه سئوالی بود در خدمتم.

ehsanarn
شنبه 07 فروردین 1389, 09:09 صبح
سلام دوست عزیز
من یک برنامه گذاشتم.نگاه کن ببین مشکلت حل میشه.

mostafaserial
شنبه 07 فروردین 1389, 19:00 عصر
منظورتون رو از مثال کامل نمی فهمم. الگوریتم کار اینطوریه :
- روبات رو به هر طریقی (مثلاً با آی سی MAX232 از طریق پورت کام) به کامپیوتر وصل می کنید.
- بعد یک شی از نوع پورت کام تعریف می کنید(جزئیات تبادل داده از طریق پورت که در برنامه میکرو ست کردید رو به پورت تعریف شده در برنامه vb.net نسبت می دهید)

My.Computer.Ports.OpenSerialPort("COM1", 19200, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
- بعد اطلاعات رو بصورت دوره ای از این پورت می خوانید، تفکیک می کنید و عملیات رسم نقطه روی بیت مپ رو انجام می دهید.
برای ساختن یک بیت مپ با زمینه سفید و طول و عرض مشخص می توانید از متد زیر استفاده کنید :

Private Function Bitmap_Generator(ByVal _Width As Int16, ByVal _Height As Int16) As Drawing.Bitmap
Dim bmp As New Drawing.Bitmap(_Width, _Height, Drawing.Imaging.PixelFormat.Format16bppRgb555)
For i As Int16 = 0 To _Width - 1
For j As Int16 = 0 To _Height - 1
bmp.SetPixel(i, j, Color.White)
Next
Next
bmp.SetPixel(0, 0, Color.White)
Return bmp
End Function
به همین روش (استفاده شده در متد فوق) هم می تونید روی بیت مپ نقطه گذاری کنید.
بازم اگه سئوالی بود در خدمتم.

ممنون از لطفتون
من توي قسمت اطلاعات سريال مشكلي ندارم
فقط من 3 تا مقدار دارم يكي x y d كه طول و يكي عرض و يكي سرعته .كه با توجه به اونها بايد خط رسم شه ضمنا من زياد با گرافيك كار نكردم.اگه ميشه اين مشكل رو با يه سورس ساده حل كنين ممنون.

Shahram_Shobeiri
شنبه 07 فروردین 1389, 22:30 عصر
x , y رو که در حال حاضر با textbox ست می شن رو با x , y روبات جایگزین کن.

mehdi.mousavi
یک شنبه 08 فروردین 1389, 01:27 صبح
@mostafaserial:

سلام.
لطفا از عناوین مناسب برای تاپیکهای خودتون استفاده کنید. این تاپیک رو به احترام افرادیکه بهتون پاسخ دادن، پاک نمیکنم اما لطفا از این پس به این مساله دقت کنید.

موفق باشید.