GLuint texture;// これに読み込んだ画像のデータが入る
//画像ファイルを展開しCGImageRefを生成します
CGImageRef image = [UIImage imageNamed:fileName].CGImage;
if(!image){ //画像ファイルの読み込みに失敗したらfalse(0)を返します
NSLog(@"Error: %@ not found",fileName);
return 0;
}
//画像の大きさを取得します
size_t width = CGImageGetWidth(image);
size_t height = CGImageGetHeight(image);
GLubyte* imageData = (GLubyte *) malloc(width * height * 4);
CGContextRef imageContext = CGBitmapContextCreate(imageData,width,height,8,width * 4,CGColorSpaceCreateDeviceRGB(),kCGImageAlphaPremultipliedLast);// 第六引数がCGImageGetColorSpace(image)だと変になる
CGContextDrawImage(imageContext, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), image);
CGContextRelease(imageContext);
//OpenGL用のテクスチャを生成します
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
for (int i=0; i<width*height; i++) {
int r = imageData[i*4+0]; /* R要素 */
int g = imageData[i*4+1]; /* G要素 */
int b = imageData[i*4+2]; /* B要素 */
if (r == 0 && g == 0 && b == 0) { /* ??に値を入れて任意の色を特定 */
imageData[i*4+3] = 0; /* 透過する */
} else {
imageData[i*4+3] = 255; /* 透過しない */
}
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
free(imageData);
今回UIKitが使えないので
三行目の が使えません。
なるべく透過などの処理を変えないでこのまま流用したいのですが
同様の処理をするにはどうしたらよいのでしょうか。
即ち、上記の処理なしでCGImageRefを取得する方法はあるでしょうか。
環境は
Xcode5.0.1
アプリケーションはMac64bit上で動作させています
よろしくお願いします。