سؤال

أنا أستخدم الكود التالي لحفظ إطار فيلم على سطح المكتب الخاص بي:

NSCIImageRep *imageRep = [NSCIImageRep imageRepWithCIImage:[CIImage imageWithCVImageBuffer:imageBuffer]];
NSImage *image = [[[NSImage alloc] initWithSize:[imageRep size]] autorelease];
[image addRepresentation:imageRep];
CVBufferRelease(imageBuffer);

NSArray *representations = [image representations];
NSData *bitmapData = [NSBitmapImageRep representationOfImageRepsInArray:representations usingType:NSJPEGFileType properties:nil];
[bitmapData writeToFile:@"/Users/ricky/Desktop/MyImage.jpeg" atomically:YES];

في السطر الأخير من التعليمات البرمجية ، أتلقى الرسائل التالية في وحدة التحكم ، دون أن يتم حفظها على سطح المكتب:

<Error>: CGImageDestinationFinalize image destination does not have enough images
CGImageDestinationFinalize failed for output type 'public.jpeg'

لا يزال Nsimage كائنًا مخصصًا لمكالمة الطريقة بأكملها ، لذلك لست متأكدًا من سبب تلقي شكاوى حول عدم كفاية عدد الصور.

سأقدر أي مساعدة. شكرا مقدما ، ريكي.

هل كانت مفيدة؟

المحلول

أعتقد أن مصدر المشكلة هو أنك تمرر مجموعة من كائنات nsciimagerep إلى تمثيل imagerepsinarray: usepe: الخصائص: ، والتي أعتقد أن تتوقع مجموعة من كائنات nsbitmapimagerep.

ما تريد القيام به هو إنشاء nsbitmapimagerep من ciimage الخاص بك. ثم يمكنك استخدام ذلك للكتابة إلى القرص. سيكون ذلك تقريبًا:

CIImage *myImage = [CIImage imageWithCVImageBuffer:imageBuffer]; 
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCIImage:myImage];
NSData *jpegData [bitmapRep representationUsingType:NSJPEGFileType properties:nil];
[jpegData writeToFile:@"/Users/ricky/Desktop/MyImage.jpeg" atomically:YES];

بالطبع ، تريد التعامل مع أي حالات خطأ وربما تمرير قاموس الخصائص لضبط إنشاء JPEG.

نصائح أخرى

أنا آسف لأنني لا أعرف حقًا لماذا لا يعمل الكود الخاص بك ، لكن الاقتراب منه بطريقة مختلفة (وأفكر بشكل أكثر كفاءة من cvimagebuffer إلى ciimage إلى nsciimagerep إلى nsimage إلى nsdata ، وإن كان ذلك على مستوى أقل قليلاً): -

  1. cvimagebuffer إلى cgimage
  2. cgimage إلى ملف JPG

ليس لدي رمز جاهز للقيام بذلك ولكن استخراج الأشياء الصحيحة من تلك الأمثلة يجب أن يكون مستقيمًا للأمام.

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