سؤال

أحاول إنشاء 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 هي شرط)

حظ سعيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top