2012-01-23 5 views
1

GLKTextureLoader와 함께 사용하기 위해 UIImage 밖으로 영역을 잘라내려고합니다.자르기 UIImage를 GLKTextureLoader와 함께 사용하십시오.

Texture Error:Error Domain=GLKTextureLoaderErrorDomain Code=12 "The operation couldn’t be completed. (GLKTextureLoaderErrorDomain error 12.)" UserInfo=0x6a6b550 {GLKTextureLoaderErrorKey=Image decoding failed} 
:

- (void)setTextureImage:(UIImage *)image 
{ 
    NSError *error; 

    CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0.0, 64.0f, 64.0f, 64.0f)); 
    texture = [GLKTextureLoader textureWithCGImage:imageRef options:nil error:&error]; 

    if(error) 
    { 
     NSLog(@"[SF] Texture Error:%@", error); 
    } else { 
     self.textureCoordinates[0] = GLKVector2Make(1.0f, 1.0f); 
     self.textureCoordinates[1] = GLKVector2Make(1.0f, 0); 
     self.textureCoordinates[2] = GLKVector2Make(0, 0); 
     self.textureCoordinates[3] = GLKVector2Make(0, 1.0f); 
    } 
} 

내가이 오류 : 나 이미지 이런 식으로 자르려고하면,

- (void)setTextureImage:(UIImage *)image 
{ 
    NSError *error; 

    texture = [GLKTextureLoader textureWithCGImage:image.CGImage options:nil error:&error]; 

    if(error) 
    { 
     NSLog(@"Texture Error:%@", error); 
    } else { 
     self.textureCoordinates[0] = GLKVector2Make(1.0f, 1.0f); 
     self.textureCoordinates[1] = GLKVector2Make(1.0f, 0); 
     self.textureCoordinates[2] = GLKVector2Make(0, 0); 
     self.textureCoordinates[3] = GLKVector2Make(0, 1.0f); 
    } 
} 

을하지만 : 내가 직접 다음과 같이하여있는 UIImage를 사용하여 질감을 설정할 수 있습니다

어떻게 UIImage의 섹션을 GLKTextureLoader로 텍스처로 사용할 수 있습니까?

답변

6

결국 나는 UIImagePNGRepresentation과 함께 작업 할 수있게되었고, 지금은 OpenGL/GLKit 만 배우고 있습니다. 전문가는 아니지만 CGImage가 일부 색 공간이나 기타 필요한 데이터가 누락되었다고 생각하고 있습니다. 텍스처.

- (void)setTextureImage:(UIImage *)image withFrame:(CGRect)rect 
{ 
    NSError *error; 

    CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, rect); 
    image = [UIImage imageWithData:UIImagePNGRepresentation([UIImage imageWithCGImage:imageRef])]; 

    texture = [GLKTextureLoader textureWithCGImage:image.CGImage options:nil error:&error]; 

    if(error) 
    { 
     NSLog(@"[SF] Texture Error:%@", error); 
    } else { 
     self.textureCoordinates[0] = GLKVector2Make(1.0f, 1.0f); 
     self.textureCoordinates[1] = GLKVector2Make(1.0f, 0); 
     self.textureCoordinates[2] = GLKVector2Make(0, 0); 
     self.textureCoordinates[3] = GLKVector2Make(0, 1.0f); 
    } 
} 
+5

같은 문제가 있었습니까? 아직 더 좋은 해결책이 있습니까? –

0

동일한 문제가 있습니다.이 버그는 이미지를 다시 그려 넣은 것으로 보입니다.

CGBitmapContextCreate(NULL, width, height, 8, 4 * width, colorSpace, kCGBitmapByteOrderDefault|kCGImageAlphaPremultipliedLast); 

을하지만, 나는이 같은 CGContext를 작성하는 경우는, 성공적으로 텍스처를로드합니다 : :이 같은 CGContext를 만들 경우

그것은, 나올 것

UIGraphicsBeginImageContextWithOptions(aImage.size, NO, aImage.scale); 
0

내가했습니다 CGImageRef에 대한 잘못된 알파 설정 때문에 같은 오류가 발생했습니다. GLKTextureLoader에 대한 문서는 내가

CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, width * (CGColorSpaceGetNumberOfComponents(space) + 1), space, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedFirst); 

모두에

CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, width * (CGColorSpaceGetNumberOfComponents(space) + 1), space, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast); 

에서 컨텍스트를 만드는 데 사용되는 코드를 변경했습니다 1.

Apple Documentation

표에서 지원의 CGImage의 형식을 나열이다 지금은 괜찮아. 그리고 이것은 Feng Stone의 문제를 해결할 것입니다. CGImageCreateWithImageInRect 함수를 건너 뛰고 올바른 매개 변수를 사용하여 이미지를 그릴 수있는 곳에서 새 CGContext를 만들 것을 권합니다. CGContextDrawImage