![]() |
|
للتحويل من Image إلى ByteArray والعكس - مع ملاحظة الطريقتين (ToArray - .GetBuffer.) - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : للتحويل من Image إلى ByteArray والعكس - مع ملاحظة الطريقتين (ToArray - .GetBuffer.) (/showthread.php?tid=5135) |
للتحويل من Image إلى ByteArray والعكس - مع ملاحظة الطريقتين (ToArray - .GetBuffer.) - RaggiTech - 05-10-12 كاتب الموضوع : عبدالله الدوسري
السلام عليكم ورحمة الله وبركاتة شرح بسيط لبعض عمليات تحويل نوع بيانات الصور للتحويل من نوع Image إلى نوع ByteArray كود : [color=blue]Public Function[/color] ConvertImageToBytes([color=blue]ByVal [/color]ImageToConvert [color=blue]As [/color]System.Drawing.Image) [color=blue]As Byte[/color]()للتحويل من نوع ByteArray إلى نوع Image كود : [color=blue]Public Function[/color] ConvertBytesToImage([color=blue]ByVal [/color]BytesToConvert [color=blue]As Byte[/color]()) [color=blue]As [/color]System.Drawing.Imageأقصد بالتحويل الصحيح (كمية البيانات في الصورة الأصل يساوي كمية البيانات بعد التحويل) يجب التحويل بنفس هيئة الصورة إذا كانت الصورة الأصل على هيئة Png ( من خلال الكود اختر الهيئة Png ) وإذا كانت الصورة الأصل على هيئة Gif ( من خلال الكود اختر الهيئة Gif ) أو بإمكانك تمرير هيئة الصورة مع الـ Parameters طبعاً بإمكانك التحويل من هيئة إلى هيئة أخرى , ولكن حجم بيانات الصورة سيختلف على حسب الهيئة التي إخترتها. ملاحظة : التحويل من هيئة إلى أخرى من الممكن أن يقلل من جودة الصورة على سبيل المثال (من Png إلى Gif) حجم الصورة سيقل وكذلك الجودة والعكس غير صحيح : لا تزيد الجودة عند التحويل ( من Gif إلى Png ) ولكن حجم الصورة سيزيد ملاحظة : يفضل إستخدام الطريقة ToArray. بدلاً من الطريقة GetBuffer. ـ ملاحظة : الطريقة ToArray. (لو كان الـ MemoryStream يحمل القيمة النصية "test" ) فأن الطريقة ToArray. ستعود بـ 4 bytes فقط . وهو عدد الـ bytes المستخدم فعلياً من قبل الـ MemoryStream الطريقة GetBuffer. (لو كان الـ MemoryStream يحمل القيمة النصية "test" ) فأن الطريقة GetBuffer. ستعود بـ 256 bytes وليس 4 bytes (كما هو مفترض من النص "test" الموجود بداخلها) والذي عدد حروفة 4 ) طول المصفوفة الناتج من هذة الطريقة 256 bytes ـ 4 bytes (متسخدمين) أي 4 bytes غير فارغة 252 bytes (غير مستخدمين) أي 252 bytes فارغة ---هذة الطريقة تحتاج أن تكون على علم بعدد الـ bytes التي تحتاجها ,, (فقط إذا كانت أقل من 256 bytes ) إذا كانت أكبر فستعود بنفس عدد البيانات الموجودة في الـ MemoryStream لأن الناتج من هذة الطريقة من الممكن أن يحتوي على زيادة في عدد الـ bytes الغير مستخدمة في المصفوفة) (فقط إذا كانت أقل من 256 bytes ) إذا كانت أكبر فلن تكون هناك زيادة في عدد الـ bytes الغير مستخدمة في المصفوفة مثلا : لو لديك MemoryStream يحمل قيمة نصية عدد حروفها 300 حرف (أكبر من 256 bytes) الناتج من الطريقة GetBuffer. سيكون 300 bytes لأنها أكثر من 256 (أي ستعود بنفس العدد) لأن القيمة النصية أكبر من الحد الأدنى وهو 256 لو لديك MemoryStream يحمل قيمة نصية عدد حروفها 100 حرف (أقل من 256 bytes) الناتج من الطريقة GetBuffer. سيكون 256 bytes لأن 100 أقل من 256 (أي ستعود بالحد الأدنى) لأن القيمة النصية أقل من الحد الأدنى وهو 256 المهم إذا كانت البيانات المراد تحويلها إلى bytes حجمها أقل من 256 الناتج سيكون 256 حتى لو كان حجم البيانات 1 Byte ستعود بحجم 256 Bytes إذا كانت البيانات المراد تحويلها إلى bytes حجمها أكبر من أو = 256 الناتج سيكون نفس حجم البيانات المراد تحويلها Base64ToImage للتحويل من نص إلى صورة : كود : Public Function Base64ToImage(ByVal base64String As String) As System.Drawing.ImageImageToBase64 للتحويل من صورة إلى نص : كود : Public Function ImageToBase64(ByVal image As System.Drawing.Image) As Stringالمشروع في المرفقات موضح بشكل أفضل : تحياتي للجميع |