Создать изображение из данных RGB? - PullRequest
5 голосов
/ 30 августа 2011

У меня настоящие проблемы с этим. У меня есть некоторые необработанные данные RGB, значения от 0 до 255, и я хочу отобразить их в виде изображения на iphone, но не могу узнать, как это сделать. Кто-нибудь может помочь? Я думаю, что мне может понадобиться использовать CGImageCreate, но просто не понимаю. Пробовал смотреть на справочник класса и чувствую себя застрявшим.

Все, что мне нужно, это изображение в градациях серого 10x10, сгенерированное из некоторых вычислений, и если есть простой способ создать png или что-то еще, что было бы здорово.

Ответы [ 3 ]

13 голосов
/ 30 августа 2011

ужасно примитивный пример, аналогичный предложению Матса, но в этой версии используется внешний пиксельный буфер (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! :)
2 голосов
/ 30 августа 2011

Используйте CGBitmapContextCreate(), чтобы создать растровое изображение на основе памяти для себя. Затем позвоните CGBitmapContextGetData(), чтобы получить указатель для вашего кода рисования. Затем CGBitmapContextCreateImage() для создания CGImageRef.

Надеюсь, этого достаточно, чтобы вы начали.

0 голосов
/ 28 августа 2011

В Mac OS вы можете сделать это с NSBitmapImageRep.Для iOS это выглядит немного сложнее.Я нашел это сообщение в блоге, хотя:

http://paulsolt.com/2010/09/ios-converting-uiimage-to-rgba8-bitmaps-and-back/

...