الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ImageDBManager Class for .NET

مغلق
بدأه hazzoom في 10 أبريل 2006 · 19 رد · 4,072 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

قمت بتصميم Class صغيره لتسهيل التعامل مع الصور من خلال ADO.NET من حيث عمليات الادخال والحذف والتنقل والتأكد من حجم الصور قبل ادخالها , وقمت بعمل مثال لاختبارها و أرجو منكم اختبارها في مشاريع أخري لاكتشاف نقاط الضعف فيها ومعالجتها وكذلك وضع أي اضافات أخري , منتظر اقتراحاتكم , وأي استفسار ...,

Namespace SmartSoft

#Region " About Author "

    'بسم الله الرحمن الرحيم
    'This class is developed by: Hazem Mohammed 3amer
    'Assiut-Egypt
    'mobile (+2)0102319009
    'You can use it freely but you can`t replace my name with any other name
    'This Class is mainly developed to manage adding pitures into databases and navigation
    'between images in the database
    'enjoy it

#End Region

Friend Class ImageDBManager

#Region " General Variables "

        Public _position As Integer  ' the position of current field
        Dim _DataSource As DataSet      ' the dataset that contains the table
        Dim _DatatableName As String    ' table name
        Dim _ImageFieldName As String   ' column which have images
        Dim _PictureBox As PictureBox   ' our picture box which display images

#End Region

#Region " Convert Image to ByteArray and Clear PictureBox "

        Public Sub ImageBinding(ByVal DataSource As DataSet, ByVal DatatableName As String, _
                            ByVal ImageFieldName As String, ByVal PictureBox As PictureBox)
            'put the specified values(Parameters) in the fields to use them in the other sub procedures
            'Remember _position = 0 since the class created
            _DataSource = DataSource
            _DatatableName = DatatableName
            _ImageFieldName = ImageFieldName
            _PictureBox = PictureBox
            'get the first image in the column and put it in the picture box as binding method
            If DataSource.Tables(DatatableName).Rows.Count = 0 Then
                Exit Sub
            Else
                'select the first image in the column and put it in the picturebox
                ' via converting it into byte array and pass it to memory stream 
                'and put it in the picturebox
                Dim Dataaray() As Byte = DataSource.Tables(DatatableName).Rows(0)(ImageFieldName)
                Dim mems As New IO.MemoryStream(Dataaray)
                PictureBox.Image = Image.FromStream(mems)
            End If
        End Sub

    Public Function IsImageLargerThan(ByVal ImageFilePath As String, ByVal SizeinKB As Integer) As Boolean
            'getting image as byte array from file via filestream and messure its length  
            'and check the length in KB 
            Dim fs As New IO.FileStream(ImageFilePath, IO.FileMode.Open, IO.FileAccess.Read)
            If fs.Length / 1024 > SizeinKB Then
                Return True
            Else
                Return False
            End If
        End Function

        Public Function IsImageLargerThan(ByVal PictureBox As PictureBox, ByVal SizeinKB As Integer) As Boolean
            'overloded method to check the size from the picturebox
            Dim mems As New IO.MemoryStream
            PictureBox.Image.Save(mems, PictureBox.Image.RawFormat)
            If mems.Length / 1024 > SizeinKB Then
                Return True
            Else
                Return False
            End If
        End Function

        Public Function ImagetoArray(ByVal PictureBox As PictureBox) As Byte()
            'get the image as byte array from the picturebox to be used in the method 
            'that inserting data by the developer in the project
            Dim imgarr As Byte()
            Dim ms As New IO.MemoryStream()
            PictureBox.Image.Save(ms, PictureBox.Image.RawFormat)
            imgarr = ms.GetBuffer
            ms.Close()
            Return imgarr
        End Function

        Public Function ImagetoArray(ByVal ImageFilePath As String) As Byte()
            'overloded method to do it by the image file
            Dim imgarr As Byte()
            Dim fs As New IO.FileStream(ImageFilePath, IO.FileMode.Open, IO.FileAccess.Read)
            Dim sr As New IO.BinaryReader(fs)
            imgarr = sr.ReadBytes(fs.Length)
            sr.Close()
            fs.Close()
            Return imgarr
        End Function

        Public Sub DeleteCurrent(ByVal PictureBox As PictureBox)
            'handling image deleting to simulate (Binding.BindingManagerBase.RemoveAt) method
            If Me._position = 0 Then
                'if the field is the first field put the next image in the picture box
                If _DataSource.Tables(_DatatableName).Rows.Count = 1 Then PictureBox.Image = Nothing
                'to synchronise the positions of the other fields because the coming 
                ' image take the position of the deleted image
                Me.NextImage()
                Me._position -= 1
                'here we check if the we are in the last record before check if position > 0 beacuase
                'the last record is > 0 but not all records > 0 is the last record
            ElseIf Me._position = _DataSource.Tables(_DatatableName).Rows.Count - 1 Then
                Me.PreviousImage()
            ElseIf Me._position > 0 Then
                Me.NextImage()
                Me._position -= 1
            End If
        End Sub
#End Region

#Region " Navigation "

        Public Sub NextImage()
            'get the next image by increasing the position and validate the position value
            _position += 1
            If _position > _DataSource.Tables(_DatatableName).Rows.Count - 1 Then
                _position -= 1
            Else
                Dim Dataaray() As Byte = _DataSource.Tables(_DatatableName).Rows(_position)(_ImageFieldName)
                Dim mems As New IO.MemoryStream(Dataaray)
                _PictureBox.Image = Image.FromStream(mems)
            End If
        End Sub

    Public Sub PreviousImage()
            'get the previous image by decreasing the position and validate the position value
            _position -= 1
        If _position < 0 Then
            _position += 1
        Else
            Dim Dataaray() As Byte = _DataSource.Tables(_DatatableName).Rows(_position)(_ImageFieldName)
            Dim mems As New IO.MemoryStream(Dataaray)
            _PictureBox.Image = Image.FromStream(mems)
        End If
    End Sub

        Public Sub FisrtImage()
            'get the first image if the records number more than 0 
            If _DataSource.Tables(_DatatableName).Rows.Count = 0 Then
                Exit Sub
            Else
                _position = 0
                Dim Dataaray() As Byte = _DataSource.Tables(_DatatableName).Rows(_position)(_ImageFieldName)
                Dim mems As New IO.MemoryStream(Dataaray)
                _PictureBox.Image = Image.FromStream(mems)
            End If
        End Sub

        Public Sub LastImage()
            'get the last image if the records number more than 0
            If _DataSource.Tables(_DatatableName).Rows.Count = 0 Then
                Exit Sub
            Else
                _position = _DataSource.Tables(_DatatableName).Rows.Count - 1
                Dim Dataaray() As Byte = _DataSource.Tables(_DatatableName).Rows(_position)(_ImageFieldName)
                Dim mems As New IO.MemoryStream(Dataaray)
                _PictureBox.Image = Image.FromStream(mems)
            End If
        End Sub
#End Region
    End Class
End Namespace

تم تعديل هذه المشاركة بواسطة hazzoom في 7 أبريل 2007 في 09:04

#2

ان شاء الله اجربها واردلك خبر

#3

الاخ hazzoom

شكراً لك وجزيت خيرا

158.gif

هناك فرق بين أن تكبر بالعمر

، و أن تكبر بالعقل
فالأولى ، إجباري
، والثانية اختياري .."
 
 

164684_514411088579476_442405016_n.jpg

#4

أنا لم أنظر للكود و لكني و لله العلم من قبل و من بعد متأكد من جودته ربنه يكون معاك يا حزومة ;)

#5

شكرا للردود وأرجو أن أسمع رأي من قاموا بالتنزيل , يعني هل فيه مشاكل ؟ هل توجد اقتراحات ؟

أنا الجزء اللي يهمني أكتر هو الجزء بتاع الـ Sub DeleteCurrent هل توجد فيه مشاكل وبالذات في الـ Synchronization بين الحقول عند مسح سجل ما ؟؟؟

كما أرجو أن تستخدموها في مشاريعكم لكي تكون التجربه أوسع ,,,

تم تعديل هذه المشاركة بواسطة hazzoom في 12 أبريل 2006 في 18:44

#7

أخي ....

أنا بدي أحمل الملف المرفق .. ومو موجود ....فينوه؟؟؟؟

ممكن أسألك سؤال .. هو انا مو كتير بروفيشنال بالكلاس ...وهادي تاني مرة بتعامل معها ..

شو يعني region وشوالفايدة منها .. وشو الهدف من وضع علامة # قبلها .

ويعطيك العافية .

#8

region

هذي بتعمل لك منطقة تقدري تحطي فيها كود وتصير تفتح وتقفل على الكود مثال

لو عملتي sub راح تلاقي قدامه موجود علامة زايد لو ضغطي عليها راح ينقفل الكود ويصيرسطر واحد

والعكس راح يفتحها

الريجون هذا بيعمل نفس الشي بس الفائدة انه بياخذ كل الكود اللي بينه وبنفس الوقت بتقدري تعطيه الاسم اللي تبغيه من غير ما اتأثري ع الكود

يعني العملية كلها للتنظيم

وطريقة كتبابتها كالتالي

# region "Write the secription as what you need"
.
.
.
.
the cde is here
.
.
# region

تم تعديل هذه المشاركة بواسطة Romantic_touch في 13 أبريل 2006 في 21:42

<span style='color:green'>سؤل ابن عباس عن علمه كيف جمعه فقال :( أوتيت لسانا سؤولا وقلبا عقولا)</span>

#9

[SIZE=14]كيف يمكن قراءة ملف صورة من الذاكرة bmp,jpg حيث يتم قراءة الهدير header الأول في الذاكرة إلى آخر بايت ؟و السلام عليكم

#10

السلام عليكم انا كنت عايز اسال سؤال بالنسبة اللكلاس انا لاحظت ان فى استخدام arraylist هل ممكن تستخدم للعرض على datagrid اصل لو كده ممكن عرض بيانات الموظفين وصورهم

شكرا

#11

مشرفنا الغالي حزوووووووووووم ..

اشكرك من كل قلبي على هذا الـ Class ..

ولكني حاولت اصنه منه ملف Dll وفشلت بسبب أن المتغير Image يعطيني الرسالة التالية " Name 'Image' is not declared

"

هل تحل لي هذه المشكلة ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#12
yaseralshikh كتب:
مشرفنا الغالي حزوووووووووووم ..

اشكرك من كل قلبي على هذا الـ Class ..

ولكني حاولت اصنه منه ملف Dll وفشلت بسبب أن المتغير Image يعطيني الرسالة التالية " Name 'Image' is not declared

"

هل تحل لي هذه المشكلة ..

استخدم الاستيراد التالي

imports  System.Drawing

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 6 أبريل 2007 في 20:21

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#13

مشرفنا الغالي محمد سامر ، بارك الله فيك ، واشكرك على الرد السريع ..

لقد تم الامر بنجاح ، اشكرك مرة أخرى ..

ولكني قمت بتجربة ، قبل ان احصل على ردك ، وهي اني استبدلت :

PictureBox.Image = Image.FromStream(mems)

بالكود التالي :

PictureBox.Image = New Drawing.Bitmap(mems)

ولكني لم اجربه بعد ، فهل تعتقد بأنه سوف ينجح .

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#14

أعتقد إذا كانت الصورة bmp

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#15

بعد التجربة وجدت أنه يعمل مع ملفات الـ JPG أيضاً ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#16

مشكوور يا أخي على جهودك الرائعة :)

#17

ألف شكر عزيزي من زمان أدور هالكود

بس ممكن أخ حزوم تعطينا مثال يستخدم هذا الكلاس

منتظر ردك

تحياتي لك

#18

ياااه هذا الموضوع قديم جدا لكن الأفضل عدم استخدام الكلاس في المشاريع ولكن يمكن الاستفادة من بعض أجزائها فقط ,,,

#19

طيب ممكن أخي تعمل لنا مثال بسييييط

لأني والله من زماااااااااااااااااااااااااااااااان

ودخت ما أقدرت اخزن وأسترد الصورة في الداتا بيس عبر الدااتا سيت

لأنه القاعدة اللي بشتغل عليها أوراكل

تحياتي لك

#20

حزووووووم لو تضيف اجراء حفظ الصورة في قاعدة البيانات يكون اكتمل الكلاس

أنا الرجل الضرب الذي تعرفونه***خشاش كرأس الحية المتوقد

لوكنت وغلاً في الرجال لضرني**** حسن جرائتي ومقتدي

منتديات طريق الهداية

هذا الموضوع مغلق.

مواضيع مشابهة