배열 RGBA 데이터 (int 바이트)를 UIImage로 변환하려고했습니다. 다음과 같은 내 코드 같습니다원시 RGBA 데이터에서 UIImage 만들기
/*height and width are integers denoting the dimensions of the image*/
unsigned char *rawData = malloc(width*height*4);
for (int i=0; i<width*height; ++i)
{
rawData[4*i] = <red_val>;
rawData[4*i+1] = <green_val>;
rawData[4*i+2] = <blue_val>;
rawData[4*i+3] = 255;
}
/*I Have the correct values displayed
- ensuring the rawData is well populated*/
NSLog(@"(%i,%i,%i,%f)",rawData[0],rawData[1],rawData[2],rawData[3]/255.0f);
NSLog(@"(%i,%i,%i,%f)",rawData[4],rawData[5],rawData[6],rawData[7]/255.0f);
NSLog(@"(%i,%i,%i,%f)",rawData[8],rawData[9],rawData[10],rawData[11]/255.0f);
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL,
rawData,
width*height*4,
NULL);
int bitsPerComponent = 8;
int bitsPerPixel = 32;
int bytesPerRow = 4*width;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
CGImageRef imageRef = CGImageCreate(width,
height,
8,
32,
4*width,colorSpaceRef,
bitmapInfo,
provider,NULL,NO,renderingIntent);
/*I get the current dimensions displayed here */
NSLog(@"width=%i, height: %i", CGImageGetWidth(imageRef),
CGImageGetHeight(imageRef));
UIImage *newImage = [UIImage imageWithCGImage:imageRef];
/*This is where the problem lies.
The width, height displayed are of completely different dimensions
viz. the width is always zero and the height is a very huge number */
NSLog(@"resultImg width:%i, height:%i",
newImage.size.width,newImage.size.height);
return newImage;
I 0 폭 및 높이 1,080,950,784의 이미지 수신 출력 이미지 (가정 내 initil 높이와 폭은 240,240이었다). 나는 이것을 정리하고 많은 관련 포럼을 점검했다. (link text) 어떻게 성공할 것인가?
'kCGBitmapByteOrderDefault'는 알파 채널을 이미지로 전송하지 않는 것 같습니다. 대신에'kCGBitmapByteOrder32Big | kCGImageAlphaLast'를 사용하십시오. –
newImage를 반환하기 전에 colorSpaceRef ('CGColorSpaceRelease (colorSpaceRef)')를 다시 배치해야한다고 생각합니다. – velkyel
@velkyel 그는 데이터 제공자'CGDataProviderRelease (provider);도 공개해야합니다. – medvedNick