Pregunta

Estoy escribiendo un plugin QuickLook. Pues bien, todo funciona. Sólo quiere probar se hacen mejor;). Por lo tanto la pregunta.
Aquí es una función que devuelve miniatura de la imagen y que estoy usando ahora.

QLThumbnailRequestSetImageWithData(
QLThumbnailRequestRef thumbnail,
CFDataRef data,
CFDictionaryRef properties);
);

http://developer.apple.com/mac/library/documentation/UserExperience/Reference/QLThumbnailRequest_Ref/Reference/reference.html#//apple_ref/c/func/QLThumbnailRequestSetImageWithData

En este momento estoy creando un archivo TIFF -> encapsulado en NSData. Un ejemplo

// Setting CFDataRef
CGSize thumbnailMaxSize = QLThumbnailRequestGetMaximumSize(thumbnail);
NSMutableAttributedString *attributedString = [[[NSMutableAttributedString alloc] 
                                                   initWithString:@"dummy" 
                                                   attributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                               [NSFont fontWithName:@"Monaco" size:10], NSFontAttributeName, 
                                                               [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:1.0], NSForegroundColorAttributeName, 
                                                               nil]
                                                   ] autorelease];
NSImage *thumbnailImage = [[[NSImage alloc] initWithSize:NSMakeSize(thumbnailMaxSize.width, thumbnailMaxSize.height)] autorelease];
[thumbnailImage lockFocus];
[[NSColor whiteColor] set];
NSRectFill(NSMakeRect(0, 0, thumbnailMaxSize.width, thumbnailMaxSize.height));
[attributedString drawInRect:NSMakeRect(0, 0, thumbnailMaxSize.width, thumbnailMaxSize.height)];
[thumbnailImage unlockFocus];
(CFDataRef)[thumbnailImage TIFFRepresentation]; // This is data

// Setting CFDictionaryRef
(CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:@"kUTTypeTIFF", (NSString *)kCGImageSourceTypeIdentifierHint, nil ]; // this is properties

Sin embargo QuickLook proporciona otra función para devolver miniatura de la imagen, es decir,

QLThumbnailRequestSetImage(
QLThumbnailRequestRef thumbnail,
CGImageRef image,
CFDictionaryRef properties);
);

http://developer.apple.com/mac/library/documentation/UserExperience/Reference/QLThumbnailRequest_Ref/Reference/reference.html#//apple_ref/c/func/QLThumbnailRequestSetImage

Tengo la sensación de que pasa CGImage a la CV en lugar de datos TIFF ayudaría a acelerar las cosas. Sin embargo- nunca he trabajado con el contexto CG antes. Lo sé, la documentación está ahí :), pero anyways- podría alguien dar un ejemplo de cómo convertir esa cadena NSAttributed en CGImageRef. Un ejemplo es un valor de 10 veces la lectura de la documentación;)
Cualquier ayuda apreciada. Gracias de antemano!

¿Fue útil?

Solución

  

podría alguien dar un ejemplo de cómo convertir esa cadena NSAttributed en CGImageRef.

No se puede convertir una cadena en una imagen; Son dos tipos completamente diferentes de datos, y uno es dos dimensiones (caracteres en el tiempo), mientras que el otro está en-menos de tres dimensiones (color sobre X e Y).

Lo que hay que hacer es dibujar de la cadena y producir una imagen del dibujo. Eso es lo que está haciendo ahora con NSImage:. La creación de una imagen y dibujar la cadena en ella

Usted está preguntando acerca de la creación de un CGImage. La creación de un de mapa de bits contexto , usando Core texto para dibujar la cadena en ella, y la creación de una imagen de los contenidos del contexto de mapa de bits es una manera de hacerlo.

Sin embargo, ya se encuentra mucho más cerca de otra solución, suponiendo que usted puede requerir Snow Leopard. En vez de pedir la NSImage para una representación TIFF, pedir por un CGImage

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top