المشاركات : 190
المواضيع 48
الإنتساب : Sep 2013
السمعة :
5
الشكر: 196
تم شكره 219 مرات في 82 مشاركات
السلام عليكم ورحمة الله وبركاته
اثناء تشغيل البرنامج وظهور الفورم للمستخدم
أريد اخذ الفورم وحفظة في صورة على سطح المكتب
بحثت عن الموضوع ووجدت مشاريع لحفظ صورة الشاشة كلها
ولكني أريد حفظ الفورم بس
شكرا لكم جميعاً .
المشاركات : 171
المواضيع 2
الإنتساب : Oct 2014
السمعة :
29
الشكر: 111
تم شكره 178 مرات في 92 مشاركات
10-11-14, 11:13 PM
(آخر تعديل لهذه المشاركة : 10-11-14, 11:54 PM {2} بواسطة الوليد ☺.)
السلام عليكم ورحمة الله
هذه دالة GetFormImage من مشروع أحد الأخوة، ترسل لها اسم الفورم واختيار بالإطار أم بدون، وأضفت لك طريقة استخدامها
PHP كود :
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click ' بالإطار ' GetFormImage(Me, True).Save("image.jpg", Imaging.ImageFormat.Jpeg) End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click ' بدون الإطار ' GetFormImage(Me, False).Save("image.jpg", Imaging.ImageFormat.Jpeg) End Sub
#Region "GetFormImage" Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, _ ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, _ ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As System.Int32) As Boolean Private Declare Auto Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As System.IntPtr) As System.IntPtr Public Function GetFormImage(ByVal frm As Windows.Forms.Form, Optional ByVal withDecor As Boolean = True) As Drawing.Bitmap Dim w As Integer = If(withDecor, frm.Width, frm.ClientSize.Width) Dim h As Integer = If(withDecor, frm.Height, frm.ClientSize.Height) Dim g As Drawing.Graphics = frm.CreateGraphics Dim bmp As New Drawing.Bitmap(w, h, g) Dim gr As Drawing.Graphics = Drawing.Graphics.FromImage(bmp) Dim grhdc As IntPtr = gr.GetHdc Dim frmhdc As IntPtr = If(withDecor, GetWindowDC(frm.Handle), g.GetHdc) BitBlt(grhdc, 0, 0, w, h, frmhdc, 0, 0, &HCC0020) gr.ReleaseHdc(grhdc) If Not withDecor Then g.ReleaseHdc(frmhdc) If frm.RightToLeft = RightToLeft.Yes And frm.RightToLeftLayout Then bmp.RotateFlip(RotateFlipType.RotateNoneFlipX) End If Return bmp End Function #End Region
End Class
المشاركات : 190
المواضيع 48
الإنتساب : Sep 2013
السمعة :
5
الشكر: 196
تم شكره 219 مرات في 82 مشاركات
10-11-14, 11:32 PM
(آخر تعديل لهذه المشاركة : 10-11-14, 11:37 PM {2} بواسطة tarek.)
شكرا استاذ الوليد .. جاري التجربة
كيف احفظ الصورة كملف خارجي وليس احفظها على اداة بيكتشر بوكس
المشاركات : 171
المواضيع 2
الإنتساب : Oct 2014
السمعة :
29
الشكر: 111
تم شكره 178 مرات في 92 مشاركات
السلام عليكم ورحمة الله
عدلت لك الكود السابق ليحفظ في ملف
المشاركات : 190
المواضيع 48
الإنتساب : Sep 2013
السمعة :
5
الشكر: 196
تم شكره 219 مرات في 82 مشاركات
10-11-14, 11:50 PM
(آخر تعديل لهذه المشاركة : 10-11-14, 11:51 PM {2} بواسطة tarek.)
شكرا استاذ الوليد بس أريد ان اعرف مسار حفظ الصورة او احدده
المشاركات : 171
المواضيع 2
الإنتساب : Oct 2014
السمعة :
29
الشكر: 111
تم شكره 178 مرات في 92 مشاركات
10-11-14, 11:52 PM
(آخر تعديل لهذه المشاركة : 10-11-14, 11:55 PM {2} بواسطة الوليد ☺.)
السلام عليكم ورحمة الله
هو في الوضع الافتراضي زي الي انا وضعته لك تلاقيه في المجلد debug للمشروع جنب ملف التشغيل
بس عليك تضع قبل اسم الملف المسار الخاص بالمجلد زي مثلا
PHP كود :
GetFormImage(Me, True).Save("c:\new folder\myformimage.jpg", Imaging.ImageFormat.Jpeg)
المشاركات : 190
المواضيع 48
الإنتساب : Sep 2013
السمعة :
5
الشكر: 196
تم شكره 219 مرات في 82 مشاركات
ربنا يكرمك كل الامور تمام
المشاركات : 171
المواضيع 2
الإنتساب : Oct 2014
السمعة :
29
الشكر: 111
تم شكره 178 مرات في 92 مشاركات
السلام عليكم ورحمة الله
الله يوفقك
المشاركات : 177
المواضيع 66
الإنتساب : Nov 2015
السمعة :
2
الشكر: 49
تم شكره 110 مرات في 66 مشاركات
24-11-15, 12:55 PM
(آخر تعديل لهذه المشاركة : 24-11-15, 12:58 PM {2} بواسطة nabil.1710.)
(10-11-14, 11:13 PM)الوليد ☺ كتب :
السلام عليكم ورحمة الله
هذه دالة GetFormImage من مشروع أحد الأخوة، ترسل لها اسم الفورم واختيار بالإطار أم بدون، وأضفت لك طريقة استخدامها
PHP كود :
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click ' بالإطار ' GetFormImage(Me, True).Save("image.jpg", Imaging.ImageFormat.Jpeg) End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click ' بدون الإطار ' GetFormImage(Me, False).Save("image.jpg", Imaging.ImageFormat.Jpeg) End Sub
#Region "GetFormImage" Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, _ ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, _ ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As System.Int32) As Boolean Private Declare Auto Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As System.IntPtr) As System.IntPtr Public Function GetFormImage(ByVal frm As Windows.Forms.Form, Optional ByVal withDecor As Boolean = True) As Drawing.Bitmap Dim w As Integer = If(withDecor, frm.Width, frm.ClientSize.Width) Dim h As Integer = If(withDecor, frm.Height, frm.ClientSize.Height) Dim g As Drawing.Graphics = frm.CreateGraphics Dim bmp As New Drawing.Bitmap(w, h, g) Dim gr As Drawing.Graphics = Drawing.Graphics.FromImage(bmp) Dim grhdc As IntPtr = gr.GetHdc Dim frmhdc As IntPtr = If(withDecor, GetWindowDC(frm.Handle), g.GetHdc) BitBlt(grhdc, 0, 0, w, h, frmhdc, 0, 0, &HCC0020) gr.ReleaseHdc(grhdc) If Not withDecor Then g.ReleaseHdc(frmhdc) If frm.RightToLeft = RightToLeft.Yes And frm.RightToLeftLayout Then bmp.RotateFlip(RotateFlipType.RotateNoneFlipX) End If Return bmp End Function #End Region
End Class
السلام عليكم شكرا لك اخى الوليد على هذا الكود و نسأل الله ان يجعل هذا فى ميزان حسناتك : الكود يعمل جيدا و لكن عندى سؤال انا اريد التقاط اكثر من صورة و عندما اضغط للصورة الثانية يلغى ما قبلها اريد كود ترقيم الصورة تلقائى حتى لا يلغى ما قبلها و شكرا اخى على المساعدة
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 71
تم شكره 6155 مرات في 1035 مشاركات
25-11-15, 02:52 PM
(آخر تعديل لهذه المشاركة : 25-11-15, 03:18 PM {2} بواسطة silverlight.)
كود :
Private Sub CaptureForm(filename As String, frame As Integer)
Dim bmp As Bitmap = GetFormImage()
filename = String.Format("{0}\{1}{2}.jpeg", IO.Path.GetDirectoryName(filename), IO.Path.GetFileNameWithoutExtension(filename), frame)
bmp.Save(filename)
End Sub
frame سيحدد رقم الصورة
اسم الملف قد يكون اي مكان تحدده انت و هنا انا وضعت الصور في فولدر المشروع
طبعا عليك ان تستخدم الدالة التي تفضل الاخ الوليد بكتابتها لك في الكود اعلاه
كيف تستخدم الكود
PHP كود :
Dim fileName As String = ".\captured.jpeg" CaptureForm(fileName, 1)
و إن كنت لا تريد استخدام دوال API لتصوير الفورم كما في كود الأخ الوليد
يمكنك استخدام هذه الدالة فهي تقوم بتصوير الفورم كاملا لكن ان اردت تصوير الفورم بدون Border فهي تحتاج الي بعض التعديل لتناسب ذلك
PHP كود :
Private Function GetFormImage() As Bitmap Dim bmp As Bitmap = New Bitmap(Me.Width, Me.Height) Dim r As Rectangle = Me.Bounds r.Offset(-r.X, -r.Y) Me.DrawToBitmap(bmp, r) Return bmp End Function
|