2011-08-29 11 views
5

Tengo un problema real con esto. Tengo algunos datos de rgb sin procesar, valores de 0 a 255, y quiero mostrarlos como una imagen en el iPhone, pero no puedo encontrar cómo hacerlo. ¿Alguien puede ayudar? Creo que podría necesitar usar CGImageCreate pero simplemente no lo entiendo. Intenté mirar la referencia de clase y me siento bastante atascado.¿Crear imagen a partir de datos RGB?

Todo lo que quiero es una imagen en escala de grises de 10x10 generada a partir de algunos cálculos y si hay una manera fácil de crear un png o algo que sería genial.

+0

¿puede agregar algunos detalles sobre su plataforma y qué lenguaje de programación? mencionas CGImageCreate, ¿puedes incluir una url? – eon

+1

¿Qué le parece dar algunos detalles de dónde está atascado? Para cualquiera que no haya visto la otra pregunta: http://stackoverflow.com/questions/7221604/create-image-from-nsarray-data/7221751#7221751 –

Respuesta

2

Uso CGBitmapContextCreate() para crear un mapa de bits basado en la memoria por sí mismo. Luego llame al CGBitmapContextGetData() para obtener un puntero para su código de dibujo. Luego CGBitmapContextCreateImage() para crear un CGImageRef.

Espero que esto sea suficiente para comenzar.

+0

Bien, aquí va: estoy programando para iOS usando Xcode y objetivo-c/coco. Me estoy atascando porque nunca antes había usado alguna de las cosas de cuarzo o cgimage y todo el mundo simplemente dice oh use CGBitmapContextCreate, etc., pero realmente necesito un ejemplo simple. –

+0

Además, gracias por el enlace, pero no pude ponerlo en funcionamiento y comencé a explicar cómo me ayudaría. Traté de imprimir los datos que se crearon para el carácter no firmado que luego se utilizó para hacer un uiimage esperando que fuera datos rgb, pero no pude verlo correctamente. Eso fue usando el proyecto de ejemplo. Cuando lo puse en mi propia cuenta, no se costó cargar mi imagen correctamente y simplemente se negó a NSLog algo. –

+0

Encontré otra página que se ve bien pero todavía no la obtengo. Soy bastante nuevo en esto. http://stackoverflow.com/questions/1579631/converting-rgb-data-into-a-bitmap-in-objective-c-cocoa –

13

un ejemplo terriblemente primitivo, similar a la sugerencia Mats, pero esta versión utiliza un tampón externo de píxeles (pixelData):

const size_t Width = 10; 
const size_t Height = 10; 
const size_t Area = Width * Height; 
const size_t ComponentsPerPixel = 4; // rgba 

uint8_t pixelData[Area * ComponentsPerPixel]; 

// fill the pixels with a lovely opaque blue gradient: 
for (size_t i=0; i < Area; ++i) { 
    const size_t offset = i * ComponentsPerPixel; 
    pixelData[offset] = i; 
    pixelData[offset+1] = i; 
    pixelData[offset+2] = i + i; // enhance blue 
    pixelData[offset+3] = UINT8_MAX; // opaque 
} 

// create the bitmap context: 
const size_t BitsPerComponent = 8; 
const size_t BytesPerRow=((BitsPerComponent * Width)/8) * ComponentsPerPixel; 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef gtx = CGBitmapContextCreate(&pixelData[0], Width, Height, BitsPerComponent, BytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast); 

// create the image: 
CGImageRef toCGImage = CGBitmapContextCreateImage(gtx); 
UIImage * uiimage = [[UIImage alloc] initWithCGImage:toCGImage]; 

NSData * png = UIImagePNGRepresentation(uiimage); 

// remember to cleanup your resources! :) 
+0

que se parece a lo que estaba buscando. El único problema es que ahora tengo errores de mach-O :( –

+0

no tuve problemas con el programa que publiqué. ¿Una nueva pregunta, quizás? – justin

+0

¡Oh, lo resolví, gracias! Había copiado accidentalmente el marco CoreGraphics en la carpeta de mi proyecto. ! –

Cuestiones relacionadas