2012-10-13 1 views
2

현재 RGBA 데이터가 포함 된 C 배열에 이미지 데이터가 있습니다. C 배열을 UII 이미지 (UOS 용)로 변환

float array[length][4] 

나는 그것이이이 파일을 NSData 및 URL로 초기화처럼 보이는있는 UIImage,이를 얻기 위해 노력하고 있어요. 다른 두 메서드는 느리기 때문에 NSData 방식에 가장 관심이 있습니다.

나는 그렇게 같이있는 NSArray에이 모든 값을 얻을 수 있습니다 :

for (i=0; i<image.size.width * image.size.height; i++){ 
    replace = [UIColor colorWithRed:array[i][0] green:array[i][1] blue:array[i][2] alpha:array[i][3]]; 
    [output replaceObjectAtIndex:i withObject:replace]; 
} 

그래서, 나는 UIColor있는 개체의 NSArray를 가득합니다. 많은 방법을 시도했지만 UIImage로 변환하려면 어떻게해야합니까?

나는 그것이 곧바로 될 것이라고 생각한다. imageWithData:data R:0 B:1 G:2 A:3 length:length width:width length:length과 같은 함수를 사용하면 좋겠지 만 내가 말할 수있는 한 기능이 없습니다.

답변

5

imageWithData:은 표준 이미지 파일 형식의 이미지 데이터를 의미합니다. 메모리에있는 PNG 또는 JPEG 파일. 원시 데이터에서 이미지를 만드는 데는 적합하지 않습니다.

일반적으로 배열, 픽셀 형식, 크기 등을 CGBitmapContextCreate 함수에 전달하여 비트 맵 그래픽 컨텍스트를 만듭니다. 비트 맵 컨텍스트를 만들었 으면 CGBitmapContextCreateImage을 사용하여 이미지를 만들 수 있습니다. CGImageRefUIImage 메서드 imageWithCGImage:으로 전달할 수 있습니다.

다음은 빨간색 픽셀 1 개와 녹색 픽셀 1 개가있는 작은 1x2 픽셀 이미지를 만드는 기본 예제입니다.

size_t width = 2; 
size_t height = 1; 
size_t bytesPerPixel = 4; 
//4 bytes per pixel (R, G, B, A) = 8 bytes for a 1x2 pixel image: 
unsigned char rawData[8] = {255, 0, 0, 255, //red 
          0, 255, 0, 255}; //green 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
size_t bytesPerRow = bytesPerPixel * width; 
size_t bitsPerComponent = 8; 
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast); 

CGImageRef cgImage = CGBitmapContextCreateImage(context); 
//This is your image: 
UIImage *image = [UIImage imageWithCGImage:cgImage]; 
//Don't forget to clean up: 
CGImageRelease(cgImage); 
CGColorSpaceRelease(colorSpace); 
CGContextRelease(context); 
+0

당신이 나에게 그것에 대한 좀 더 자세한 내용을 제공 할 수 : 그것은 단지, 일반적으로, 당신은 다른 곳의 과정에서이 데이터를 얻을 것 색상 구성 요소의 순서를 보여주기위한 것입니다 하드 코딩 된 픽셀 값을 사용한다? 원한다면 예제가 매우 도움이 될 것입니다. 내가 이해 한 바로는,'CGBitmapContextCreate' 함수로'CGBitmapContextRef'를 만들었지 만 어디에서나'CGBitmapContextRef'를 찾을 수 없습니다. 그런 다음 그 생성물을'CGBitmapContextCreateImage'에 전달한 다음 그 이미지를'imageWithCGImage '로 전달합니다. – Scott

+0

죄송합니다.'CGBitmapContextRef'가 잘못되었습니다.'CGBitmapContextCreate' 함수는 실제로'CGContextRef'를 반환합니다. 간단한 예제를 찾을 수 있는지 보겠습니다 ... – omz

+0

답변에 대한 기본 예제를 추가했습니다. – omz

관련 문제