Я делаю снимок через камеру и хочу изменить его формат, чтобы сделать его совместимым с текстурой OpenGL ES 2.0.
Сначала я получаю картинку и меняю ее размер (на всякий случай делаю ее степенью 2):
UIImage *newImage = [self imageWithImage:imgName scaledToSize:CGSizeMake(100, 144)];
Затем я меняю формат с jpeg (который, я думаю, по умолчанию является форматом iphone) на png:
NSData *test = UIImagePNGRepresentation(newImage);
UIImage *converted = [[UIImage alloc] initWithData:test];
В последний раз я создаю свой контекст и рисую в нем:
GLubyte * spriteData = (GLubyte *) calloc(width*height*4, sizeof(GLubyte));
CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width*4,
CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(spriteContext, CGRectMake(0, 0, width, height), spriteImage);
CGContextRelease(spriteContext);
И после этого я могу просто добавить его в открытый буфер GL, к сожалению, он не работает (появляется только черный), я уверен, что это из-за формата изображения, потому что если я делаю ту же самую процедуру с другим изображением, которое я уже знаю это работает, тогда все идет гладко.
Я провел некоторое исследование, и это может быть связано с глубиной цвета в моем изображении, поскольку мне нужно 4 бита на пиксель для рендеринга в текстуре opengl (4,4,4,4).
Внутренний формат: RGBA, Внешний формат: RGBA, Тип: UNSIGNED BYTE, Байт на пиксель: 4.
Итак, мой вопрос: как мне изменить этот png с любой необходимой ему глубины на схему, которая мне нужна?
PD: Если кто-нибудь знает другой способ загрузки изображения в opengl, пожалуйста, дайте мне знать!
Спасибо!