تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة في حفظ الصورة
#1
السلام عليكم
واجهتني مشكلة بسيطة وليست لدي فكرة عن كيفية حلها
وهي عندما اخزن صورة في الميموري ستريم على هيئة Jpeg ثم استخرجها لا استطيع خزنها مجددا بنفس الطريقة
حيث يحدث خطأ غير معروف [حدث خطأ عام في GDI+]

قمت بتحميل صورة من الجهاز بأي امتداد بواسطة الدالة Image.FromFile
ثم أحفظها في الستريم Image.Save(MemoryStream, ImageFormat.Jpeg) l
واستخرج الصورة من الستريم Image.FromStream
الان عندما احاول حفظ الصورة مجددا في الستريم بنفس الطريقة يحدث الخطأ
علما أن الخطأ يحدث مع أي نوع من الصور Jpeg و Png

هل واجه أحد مثل هذه المشكلة او يعرف وجهة الحل لابحث عنه بنفسي
PHP كود :
Try
 
                   Dim img As Image Image.FromFile("C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"True)
 
                   Dim ms As New IO.MemoryStream

                    img
.Save(msImaging.ImageFormat.Jpeg)
 
                   Dim newImage As Image Image.FromStream(msTrue)
 
                   ms.Dispose()
 
                   ms = New IO.MemoryStream
                    newImage
.Save(msImaging.ImageFormat.Jpeg)
 
                   ms.Dispose()
 
               Catch ex As Exception
                    MsgBox
(ex.MessageMsgBoxStyle.Critical)
 
               End Try 
<يعطيك العافية>
الرد }}}
تم الشكر بواسطة:
#2
الأسرع و الأفضل لك أ ن تستخدم الدوال التالية

PHP كود :
   Public Shared Function ToBitmap(buffer() As Bytewidth As Integerheight As Integer) As Drawing.Bitmap
        Dim bmp 
As New System.Drawing.Bitmap(widthheight)
 
       Dim data As Imaging.BitmapData bmp.LockBits(New Rectangle(00bmp.Widthbmp.Height), Imaging.ImageLockMode.WriteOnlyImaging.PixelFormat.Format32bppArgb)
 
       Runtime.InteropServices.Marshal.Copy(buffer0data.Scan0buffer.Length)
 
       bmp.UnlockBits(data)
 
       Return bmp
    End 
Function

 
   Public Shared Function ToBytes(bmp As Bitmap) As Byte()
 
       Dim data As Imaging.BitmapData bmp.LockBits(New Rectangle(00bmp.Widthbmp.Height), Imaging.ImageLockMode.ReadOnlyImaging.PixelFormat.Format32bppArgb)
 
       Dim buffer As Byte() = New Byte(data.Stride data.Height 1) {}
 
       Runtime.InteropServices.Marshal.Copy(data.Scan0buffer0buffer.Length)
 
       bmp.UnlockBits(data)
 
       Return buffer
    End 
Function 
Retired
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , Amir_Alzubidy , Fantastico
#3
مرحبا اخى

سبب المشكله انك استخدمت ms.Dispose الاولى والتي اتلفت المتغير ms فلم يعد بامكانك استخدامه مره اخرى حتى لو عملت New لنفس الاسم
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , Fantastico
#4
(22-09-17, 02:23 AM)silverlight كتب : الأسرع و الأفضل لك أ ن تستخدم الدوال التالية

شكرا لك Smile
يبدو انني سأستخدم هذه الدوال كثيرا

(22-09-17, 02:52 AM)أبو نوره كتب : مرحبا اخى

سبب المشكله انك استخدمت ms.Dispose الاولى والتي اتلفت المتغير ms فلم يعد بامكانك استخدامه مره اخرى حتى لو عملت New لنفس الاسم

لا اعتقد ذلك يا صديقي
لان المتغير ms لا يتلف
الذي تلف هو الكائن Object المرتبط بالمتغير ms
وتم انشاء كائن جديد New بدلا منه ليرتبط بالمتغير ms
<يعطيك العافية>
الرد }}}
تم الشكر بواسطة:
#5
(22-09-17, 02:23 AM)silverlight كتب : الأسرع و الأفضل لك أ ن تستخدم الدوال التالية
وكيف يتم استدعاء هذين الدالتين وكيف

وبارك الله فيك
الرد }}}
تم الشكر بواسطة:
#6
راجع الموضوع التالي : قد يفيدك

تحويل الصورة الي مصفوفة بايت و العكس
Retired
الرد }}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم