تحويل nsimage* إلى cgimageref؟
-
23-09-2019 - |
سؤال
هل هناك طريقة سهلة للقيام بذلك تعمل في 10.5؟
في 10.6 يمكنني استخدام nsimage cgimageforproposedrect: سياق فارغ: تلميحات فارغة: فارغة
إذا كنت لا أستخدم صورًا بالأبيض والأسود 1B (مثل المجموعة 4 TIFF) ، فيمكنني استخدام نقار النقط ، ولكن يبدو أن cgbitmaps لا تحب هذا الإعداد ... هل هناك طريقة عامة للقيام بذلك؟
أحتاج إلى القيام بذلك لأن لديّ ikimageview يبدو أنه يريد فقط إضافة cgimages ، لكن كل ما لدي هو nsimages. حاليًا ، أستخدم طريقة setImage الخاصة: (nsimage*) التي سأستخدمها حقًا ...
المحلول
وجدت الحل التالي على هذه الصفحة:
NSImage* someImage;
// create the image somehow, load from file, draw into it...
CGImageSourceRef source;
source = CGImageSourceCreateWithData((CFDataRef)[someImage TIFFRepresentation], NULL);
CGImageRef maskRef = CGImageSourceCreateImageAtIndex(source, 0, NULL);
يبدو أن جميع الطرق هي 10.4+ ، لذا يجب أن تكون بخير.
نصائح أخرى
هذا هو الطريق الطويل. يجب عليك القيام بذلك فقط إذا كنت لا تزال تدعم إصدارًا قديمًا من OS X. إذا كنت تتطلب 10.6 أو أحدث ، فقط استخدم CGImage
طريقة في حين أن.
اعتبارًا من Snow Leopard ، يمكنك فقط اطلب من الصورة إنشاء cgimage لك, ، عن طريق إرسال nsimage CGImageForProposedRect:context:hints:
رسالة.
إليك إجابة أكثر تفصيلاً لاستخدامها - CGImageForProposedRect:context:hints:
:
NSImage *image = [NSImage imageNamed:@"image.jpg"];
NSRect imageRect = NSMakeRect(0, 0, image.size.width, image.size.height);
CGImageRef cgImage = [image CGImageForProposedRect:&imageRect context:NULL hints:nil];
فقط فعلت هذا باستخدام CGImageForProposedRect:context:hints:
...
NSImage *image; // an image
NSGraphicsContext *context = [NSGraphicsContext currentContext];
CGRect imageCGRect = CGRectMake(0, 0, image.size.width, image.size.height);
NSRect imageRect = NSRectFromCGRect(imageCGRect);
CGImageRef imageRef = [image CGImageForProposedRect:&imageRect context:context hints:nil];