2011-11-14 92 views
1

我想讀取iOS平臺上的紋理UIImage。我在StackOverflow上找到了代碼片斷,但是問題在於當我顯示它顯示的紋理時,鏡像是顛倒的。在UIImage到紋理轉換,紋理垂直翻轉

int numComponents = 4; 

UIImage* image = [UIImage imageNamed:@"Test.png"]; 
CGImageRef imageRef = [image CGImage]; 
int width = CGImageGetWidth(imageRef); 
int height = CGImageGetHeight(imageRef); 

//Allocate texture data 
GLubyte* textureData = (GLubyte *)malloc(width * height * numComponents);  

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
NSUInteger bytesPerPixel = 4; 
NSUInteger bytesPerRow = bytesPerPixel * width; 
NSUInteger bitsPerComponent = 8; 
CGContextRef context = CGBitmapContextCreate(textureData, width, height, 
              bitsPerComponent, bytesPerRow, colorSpace, 
              kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
CGColorSpaceRelease(colorSpace); 

CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); 
CGContextRelease(context); 

//texture setup 
GLuint textureID;  
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glGenTextures(1, &textureID); 

glBindTexture(GL_TEXTURE_2D, textureID); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureDataMirrored); 

我也嘗試使用以下行(在讀取數據之前)鏡像UIImage,但它也不工作。其實沒有任何效果。

image = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:UIImageOrientationUpMirrored]; 

請讓我知道我在這裏做錯了什麼。謝謝。

+0

http://stackoverflow.com/questions/506622/cgcontextdrawimage-draws-image-upside-down-when-passed-uiimage-cgimage的可能重複 –

+0

由於它沒有完全回答,但確實讓我找到了解決辦法。 – kal21

+0

如果你願意,你可以接受你自己的解決方案。 – coder

回答

5

這兩條線固定的問題

CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0,height); 
CGContextConcatCTM(context, flipVertical);