uiimage من البايتات التي عقدت في nsstring
-
11-09-2019 - |
سؤال
أحاول إنشاء UIIMAGE من صفيف بايت محتفظ به بالفعل داخل NSstring.
هل يمكن لشخص ما أخبرني كيف يمكنني القيام بذلك؟
هنا ما كنت أفكر في القيام به:
NSString *sourceString = @"mYActualBytesAREinHERe=";
//get the bytes
const char *bytesArray = [sourceString cStringUsingEncoding:NSASCIIStringEncoding];
//build the NSData object
NSData *data = [NSData dataWithBytes:bytesArray length:[sourceString length]];
//create actual image
UIImage *image = [UIImage imageWithData:data];
المشكلة هي صورة هو دائما 0x0 (nil).
سيكون موضع تقدير أي اقتراحات.
شكرا!
المحلول
لتحويل صورة إلى سلسلة تحتاج إلى طريقة للتحويل NSData
إلى سلسلة Base64cencoded والعودة (الكثير من الأمثلة هنا). أسهل منها للاستخدام هي فئات NSData
لذلك يمكنك أن تفعل شيئا مثل هذا:
UIImage* pic = [UIImage imageNamed:@"sample.png"];
NSData* pictureData = UIImagePNGRepresentation(pic);
NSString* pictureDataString = [pictureData base64Encoding];
للذهاب في الاتجاه والآخر تحتاج إلى محول عكسي:
UIImage* image = [UIImage imageWithData:[NSData
dataFromBase64EncodedString: pictureDataString]];
نصائح أخرى
[UIImage imageWithData:data];
سيعود لا شيء إذا لم يفهم البيانات التي يتم تمريرها إليها. أود أن أتحقق من الترميز الخاص بك، إلخ. من الغريب أن تعقد سلسلة ثنائية بيانات صورة نقية دون نوع من الترميز (Base64، إلخ). ترميزات السلسلة والترفيه الثنائية غير متوافقة.
أراهن أن بيانات الصور الخاصة بك تحتوي على بعض الأحرف الفارغة هناك (0x00) وكما تعلم أن هذا هو المنهي للسلسلة، لذلك عندما تسأل سلسلة C، ربما تحصل على البيانات القليل من البيانات.
جرب شيئا مثل - (nsdata *) datausingencoding: (nsstringencoding) ترميز؛ لتوليد nsdata الخاص بك.
إذا لم ينجح ذلك، فأنت بحاجة إلى تقييم ما إذا كان إعداد البيانات في nsstring (مع الأحرف الفارغة المضمنة) لا يسبب فقدان البيانات أيضا.
مثل أحد المشاركين الآخرين، ربما تكون Base-64 ترميز بياناتك فكرة جيدة (إذا كنت تستخدم سلسلة لنقل بيانات IMG هي شرط)
حظ سعيد.