29-03-16, 11:44 AM
(آخر تعديل لهذه المشاركة : 29-03-16, 11:51 AM {2} بواسطة silverlight.)
القيمة التي نحصل عليها هنا عبارة عن ما يسمي HBitmap و هي تمثل GDI Object و الرقم الذي يعبر عنها يقوم بالإحتفاظ بكل المعلومات عن الصورة و علي فكرة انا قمت بحفظ الصورة في ملف و استطعت استردادها من نفس الملف و بدون اي مشاكل حتي بعد أن قمت بإغلاق الكمبيوتر تم استرجاع الصوة من نفس الرقم
عموما لو ان الكود لا يعمل معك جيدا انا لدي كود اخر يقوم بتحوبل الصورة الي بايت وذلك باستخدام LockBytes and UnLockBytes و يتم استرجاع الصورة بنفس الأسلوب و هذا الكود يعتبر من أسرع طرق حفظ الصورة علي الإطلاق و لاحقا سأضع لك الكود هذا
عموما الكود التالي يوضح كيف يتم حفظ الصورة في ملف و استرجاع الصورة من ملف
و الكود التالي يوضح كيف يتم استخدام الكود اعلاه لحفظ الصورة وهنا انا قمت بتعريف صورة موجودة في Resources المشروع
ثم وباستخدام الأكواد اعلاه قمت بتجويل الصورة الي رقم ثم قمت بحفظها في ملف ومكان هذا الملف هو فهرس المشروع و يمكن ان تغير مكان حفظ الملف كيفما شئت
وأيضا قمت بعرض الصورة في PictureBox بعد استرداد الصورة من الرقم و هذا للتوضيح فقط
و الكود التالي يوضح كيف قمت انا باسترداد الصورة من الملف و جعلتها كخلفية للفورم مثلا
اتمني تكتب لنا كيف قمت أنت باستخدام الكود لأنه ومن المفترض لو ان الرقم به مشكلة سيحدث لديك بعض Exceptions
لدي سؤال لك هل قمت بحفظ الرقم في ملف أو في ملف sql او ماذا ...... أم لم تحفظ الرقم إطلاقا؟
عموما لو ان الكود لا يعمل معك جيدا انا لدي كود اخر يقوم بتحوبل الصورة الي بايت وذلك باستخدام LockBytes and UnLockBytes و يتم استرجاع الصورة بنفس الأسلوب و هذا الكود يعتبر من أسرع طرق حفظ الصورة علي الإطلاق و لاحقا سأضع لك الكود هذا
عموما الكود التالي يوضح كيف يتم حفظ الصورة في ملف و استرجاع الصورة من ملف
PHP كود :
Private Const DataFileName As String = ".\data.bin"
Friend Function BitmapToInteger(bmp As Bitmap) As Integer
Dim ptr As System.IntPtr = System.IntPtr.Zero
Dim result As Integer = CType(Nothing, Integer)
If bmp IsNot Nothing Then
ptr = bmp.GetHbitmap()
End If
result = ptr.ToInt32
' OR, you may use
'result = ptr.ToInt64
If ptr <> IntPtr.Zero Then
ptr = IntPtr.Zero
End If
Return result
End Function
Friend Function IntegerToBitmap(value As Integer) As Bitmap
Return Bitmap.FromHbitmap(value)
End Function
Private Function WriteDataToFile(bmp As Bitmap, filename As String) As Boolean
Dim characterEncoding As System.Text.Encoding = CType(Nothing, System.Text.Encoding)
If characterEncoding Is Nothing Then
Dim encoder As System.Text.Encoding = CType(System.Text.Encoding.UTF8.Clone(), System.Text.Encoding)
encoder.EncoderFallback = System.Text.EncoderFallback.ReplacementFallback
characterEncoding = encoder
End If
Using writer As New System.IO.BinaryWriter(System.IO.File.Open(filename, System.IO.FileMode.Create), characterEncoding)
Dim i As Integer = BitmapToInteger(bmp)
writer.Write(i)
Return True
End Using
Return False
End Function
Private Function ReadDataFromFile(filename As String) As Bitmap
Dim bmp As Bitmap = CType(Nothing, Bitmap)
If (System.IO.File.Exists(filename)) Then
Using reader As New System.IO.BinaryReader(System.IO.File.Open(filename, System.IO.FileMode.Open), New System.Text.UTF8Encoding(False, False))
Dim i As Integer = reader.ReadInt32
bmp = IntegerToBitmap(i)
End Using
End If
Return bmp
End Function
و الكود التالي يوضح كيف يتم استخدام الكود اعلاه لحفظ الصورة وهنا انا قمت بتعريف صورة موجودة في Resources المشروع
ثم وباستخدام الأكواد اعلاه قمت بتجويل الصورة الي رقم ثم قمت بحفظها في ملف ومكان هذا الملف هو فهرس المشروع و يمكن ان تغير مكان حفظ الملف كيفما شئت
وأيضا قمت بعرض الصورة في PictureBox بعد استرداد الصورة من الرقم و هذا للتوضيح فقط
PHP كود :
Dim bmp As Bitmap = CType(My.Resources.ResourceManager.GetObject("TestingImage"), Bitmap)
Dim bitmapInteger As Integer = BitmapToInteger(bmp)
PictureBox1.Image = CType(IntegerToBitmap(bitmapInteger), Bitmap)
If WriteDataToFile(CType(My.Resources.ResourceManager.GetObject("TestingImage"), Bitmap), DataFileName) Then
MessageBox.Show("Bitmap has been saved to file")
Else
MessageBox.Show("Do Not know how to save bitmap to file")
End If
و الكود التالي يوضح كيف قمت انا باسترداد الصورة من الملف و جعلتها كخلفية للفورم مثلا
PHP كود :
Me.BackgroundImage = CType(ReadDataFromFile(DataFileName), Bitmap)
اتمني تكتب لنا كيف قمت أنت باستخدام الكود لأنه ومن المفترض لو ان الرقم به مشكلة سيحدث لديك بعض Exceptions
لدي سؤال لك هل قمت بحفظ الرقم في ملف أو في ملف sql او ماذا ...... أم لم تحفظ الرقم إطلاقا؟

