PDA

View Full Version : سوال: ذخیره نقاشی رسم شده روی فرم .؟



sari-1369
شنبه 03 اسفند 1387, 01:21 صبح
سلام دوستان .


من با دستورات :



Dim g As Graphics
g.Clear(Form1.BackColor)

g.DrawRectangle(Pens.Red, Form1.x, Form1.y, Form1.x2 - Form1.x, Form1.y2 - Form1.y)




یه سری شکل روی فرم می کشم . حالا می خوام انو به صورت یه عکس در بیارم . ( هم انداره فرم )

از دستور :



Dim b2 As System.Drawing.Rectangle
b2.X = 0
b2.Y = 0
b2.Width = Me.Width
b2.Height = Me.Height
Dim b As New Bitmap(Me.Width, Me.Height)
Me.DrawToBitmap(b, b2)
PictureBox1.Image = b


استفاده کردم ، از هر چیزی که روی فرم هست عکس میگیره ، الا اونایی که با دستور اولی رسم کردم . ( مستطیل )

پروژه رو هم ضمیمه کردم ( یه خورده قاطی پاتیه )


پیشاپیش از همه ممنونم .

mostafaaa
شنبه 03 اسفند 1387, 10:39 صبح
سلام دوست من
از اين استفاده كن

Public Function FormScreenShot() As Bitmap
Dim Bit As New Bitmap(Me.Width, Me.Height)
Dim G As Graphics = Graphics.FromImage(Bit)
G.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, Bit.Size)
Return Bit
End Function

sari-1369
شنبه 03 اسفند 1387, 17:14 عصر
ویرایش شد ...

sari-1369
شنبه 03 اسفند 1387, 20:05 عصر
آقا بابت این کد دستت درد نکنه .

من فکرایی که تو سرم بود ، نتونستم پیاده کنم .

واست میگم ، ببین شدنیه ؟

من می خوام هر دفعه که کاربر روی لیبل ( تو سوال قبل فرم بود ، لیبل گرفتم که راحت تر باشه ) یه شکلی رو رسم میکنه ، وقتی موس رو ول میکنه ( mouseup ) یه عکس از اون لیبل بگیره و به عنوان بگراند ایمیج همون لیبل قرار بده . که وقتی کاربر می خواد شکل بعدی رو رسم کنه ، قبلی حذف نشه .

که واسش این کد رو نوشتم . ( ولی کار نمیکنه ، یعنی هر دفعه که شکل جدید رسم میکنم کلا بکگراند ایمیج قبلی میپره )



Public Function FormScreenShot() As Bitmap
Dim Bit As New Bitmap(lbl.Width, lbl.Height)
Dim G As Graphics = Graphics.FromImage(Bit)
G.CopyFromScreen(Me.Location.X + 90, Me.Location.Y + 38, 0, 0, Bit.Size)
Return Bit
End Function



Private Sub lbl_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lbl.MouseUp

Me.lbl.BackgroundImage = FormScreenShot()
End Sub


و تو هر دفعه رسم شکل می خوام عکسی که از لیبل گرفته شده رو تو یه آرایه از نوع Bitmap بریزم که قابلیت Undo رو به برنامه اضافه کنم .

امیدوارم منظورمو خوب رسونده باشم .


در ضمن ، فایل پروژه رو هم تو همین پست ضمیمه کردم .

shask00l
شنبه 03 اسفند 1387, 22:23 عصر
دوست عزیز ... چرا اشکال رو بصورت برداری ذخیره نمیکنی .؟ اینجوری هم حجمشون کمتر میشه هم کار کردن باهاشون راحت تره .

mostafaaa
شنبه 03 اسفند 1387, 22:43 عصر
سلام دوست عزيز
گل پسر توي اون تاپيك قبلي كلاسي كه برات نوشته بودم خوب همين كار رو ميكرد ديگه ، چه كاريه آخه از فرم عكس بگيريم ، چرا لقمه رو دور سرت ميگردوني؟؟!
اين رو نگاه كن با موس ميتوني 1000 تا دايره روي فرم بكشي و هيچكدوم هم از بين نميره!!

sari-1369
شنبه 03 اسفند 1387, 23:59 عصر
پس بی زحمت در مورد کد خودت توضیح بده .

من سر در نیووردم ، چطوری شکل های کشیده شده رو نگه می داری ؟؟

mostafaaa
یک شنبه 04 اسفند 1387, 10:23 صبح
سلام دوست من
همونطور كه اون دوستمون هم گفتن بهترين راه اينه كه شكلها رو پس از رسم كردن ، بصورت برداري ذخيره كنيم.
در رويداد MousUp همون كلاس كه واست توي تاپيك قبلي گزاشته بودم از همين روش استفاده كردم !!
يا علي

sari-1369
یک شنبه 04 اسفند 1387, 12:32 عصر
ببین دوست عزیز . این برنامه یه پروژست که من باید تو قالب کلاس های abstract تحویل بدم .

در مورد ذخیره برداری هم اطلاغاتی ندارم ، راهنمایی کن plz .

mostafaaa
یک شنبه 04 اسفند 1387, 12:45 عصر
سلام دوست من
ببین دوست من شما برای کشیدن یه دایره روی فرم به حداقل 4 آرگومان زیر نیاز داری :

X
Y
Width
Height
که از نوع Single میتونن باشه شما با ذخیره این چهار مقدار برای هر دایره میتونی اون رو درست به همون شکل و در همون مکان قبلی بکشی!
شما بعد از کشیدن هر دایره و توی رویداد MouseUp میتونی این مقادیر رو ذخیره کنی و هر بار خواستی شکل جدیدی بکشی اینها رو همراه اون شکل جدید دوباره رسم کنی.

e.Graphics.DrawEllipse(Pens.Black, X, Y, Width, Height)
یا علی

sari-1369
یک شنبه 04 اسفند 1387, 20:55 عصر
سلام :لبخند:

2 تا سوال ساده ( البته واسه شما )

چطوری آرایه رو با طول نامحدود تغریف کنم ؟

mostafaaa
یک شنبه 04 اسفند 1387, 21:45 عصر
سلام دوست من میتونی از ArrayList یا Generic ها استفاده کنی!
Dim List As New ArrayList 'OR Dim List As New List(Of YourType)

sari-1369
دوشنبه 05 اسفند 1387, 00:32 صبح
بازم مزاحم همیشگی اومد . :خجالت:

من هرچی گشتم نتونستم brush رو پیدا کنم . میشه بگی چطوری میشه رسمش کرد ؟

و سوال دیگه اینکه . برای ذخیره این label به صورا یه عکس jpg | gif | png | ... چیکار کنم ؟؟

sari-1369
سه شنبه 06 اسفند 1387, 01:26 صبح
کسی نیست کمکم کنه ؟؟؟ :گریه:

sari-1369
چهارشنبه 07 اسفند 1387, 14:42 عصر
کسی نیست سوال 13 رو جواب بده ؟؟

راستی کسی آیکون های ، قلم ، قلمو ، سطل رنگ واسه ماوس نداره ؟

shask00l
شنبه 10 اسفند 1387, 23:40 عصر
راستی کسی آیکون های ، قلم ، قلمو ، سطل رنگ واسه ماوس نداره ؟

از resource های خود برنامه paint ویندوز بردار .

sari-1369
یک شنبه 11 اسفند 1387, 01:00 صبح
از resource های خود برنامه paint ویندوز بردار .

مسیرش کجاست ؟؟

shask00l
یک شنبه 11 اسفند 1387, 23:01 عصر
:افسرده:


%SystemRoot%\system32\mspaint.exe

sari-1369
یک شنبه 11 اسفند 1387, 23:24 عصر
این که فایل اجراییشه ...

shask00l
دوشنبه 12 اسفند 1387, 07:25 صبح
این که فایل اجراییشه ...

resource ها به همراه فایل اجرایی ذخیره میشن .

:متفکر: آقا چرا بیخودی خودتو میپیچونی .؟ اگه دنبال ایکون میگردی برو تو گوگل سرچ بزن .

http://images.google.com/images?hl=en&q=paint+icon&btnG=Search+Images&gbv=2
2.290.000 نتیجه .!

علاوه بر این میتونی از ایکون ها هم عکس بگیری و بصورت آیکون برا خودت ذخیره کنی .

به کد برنامه توجه کن . نه به قیافش . قیافه رو بعدا میشه درست کرد . ولی اگه پایه برنامه رو بد بریزی . ............. ولش.!

sari-1369
دوشنبه 12 اسفند 1387, 15:40 عصر
میدونم چی میگی :لبخند: اون پستو زده بودم که تایپیک بیاد بالا :لبخند:

حالا کسی نیست در مورد سوالای قبلی کمک کنه ؟؟ :ناراحت: