2012-07-04 5 views
0

iOS 프로그래밍을 공부하고 있습니다.포인터를 사용하여 UIImage를 처리 할 수 ​​있습니까?

이미지를 처리해야합니다.

이미지를 BMP 파일로 만들어야합니다. iOS에서는 BMP 파일을 만들 수 없습니다.

그래서 내가 포인터를 사용하여 BMP 파일을 만들 수 있다고 생각합니다.

나는 BMP 헤더를 만듭니다. NSData 개체에 넣으십시오.

는 지금은 그 NSData에 이미지 데이터의 저장 떠났다. (내가 bmpData 말 것)

여기 내 궁금 시작합니다.

나는 크기 나 컨텍스트에서 UIImage 얻을 128 X 64

되는 화상을 가져야한다. (내가 image1을 말하는 것이다)

가 지금은 context2에서 UIImage 내려면 image1에 드로잉, 128 X 64

i가 그 크기를 사용 context2을 인 CGSize을 어떤 크기가 128 x 64, 크기가 조정 된 image1.

저는 UIImageView으로 만들고 image2를 사용하면 정상적으로 작동합니다. 좋은. image2가 잘 만들어진다.

그래서 서명 된 char * 포인터를 선언했습니다.

unsigned char *bmpDataPointer = (unsigned char *)image2; 

과 내가 루프

for(int i = 0; i < 64; ++i) 
{ 
    for(int j = 0 ; j < 128; ++j) 
    { 
     // dataObj and bmpData are different NSData object 
     // dataObj just contain bitmap data to check my pointer works fine or not. 
     [dataObj appendBytes:&(bitmapDataPointer[i*1 + j]) length:sizeof(char)]; 
    } 
} 

사용하고 난 데이터가 유효한지 확인하는 UIImage을 실패합니다.

UIImage *createdImageUsedByaPointer = [UIImage imageWithData:dataObj]; 
if(createdImageUsedByaPointer == nil) 
{ 
    NSLog(@"nil!"); 
} 

ok run. 문자열 nil이 표시됩니다.

왜 그런가요? 나는 문맥 크기를 128 x 64로 만든다. 그래서 나는 128 x 64 번 반복한다.

하지만 제대로 작동하지 않습니다.

어떻게 해결할 수 있습니까 ??

어떻게 포인터를 사용하여 UIImage을 처리 할 수 ​​있습니까 ??

누구나 알고있는 나를 도와주세요.

+0

'이미지 2'의 유형은 무엇입니까? – Alexander

+0

image2 is UIImage – MoonSoo

+0

'UIImage' 객체를'unsigned char *'로 형변환 할 수 없습니다. '이미지 객체는 불변이므로 기본 이미지 데이터에 대한 직접 액세스도 제공하지 않습니다. 그러나 UIImagePNGRepresentation 및 UIImageJPEGRepresentation 함수를 사용하여 이미지 데이터의 PNG 또는 JPEG 표현을 포함하는 NSData 객체를 가져올 수 있습니다. – Alexander

답변

0

NSData이 몰라하지만 ImageMagick를 처리합니다 수출이다.

이 라이브러리는 ImageMagick for iOS 및 아래 코드를 사용하십시오.

UIImage *img9 = [UIImage imageNamed:@"00009_face.jpg"]; 
MagickWand *bmpWand = NewMagickWand(); 
NSData *bmpObj = UIImagePNGRepresentation(img9); 
MagickSetFormat(bmpWand, "bmp"); 
MagickReadImageBlob(bmpWand, [bmpObj bytes], [bmpObj length]); 

size_t bmp_size; 
unsigned char * bmp_image = MagickGetImagesBlob(bmpWand, &bmp_size); 
NSData *bmpData = [[[NSData alloc] initWithBytes:bmp_image length:bmp_size] autorelease]; 
free(bmp_image); 
DestroyMagickWand(bmpWand); 

NSArray *pathsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString * documentDirectory = [pathsArray objectAtIndex:0]; 
NSString * bmpPath = [documentDirectory stringByAppendingPathComponent:@"test2.bmp"]; 
[bmpData writeToFile:bmpPath atomically:NO]; 

NSLog(@"bmpPath %@", bmpPath); 
0

왜 그렇게 복잡합니까? 다음과 같이

당신은 비트 맵 컨텍스트를 만들 수 있습니다

여기
CGContextRef context = CGBitmapContextCreate(data, width, height, 
      bitsPerComponent, 
      bytesPerRow, colorSpace, 
      kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 


CGColorSpaceRelease(colorSpace); 
CGImageRef imageRef = CGBitmapContextCreateImage(context); 
UIImage *result = [UIImage imageWithCGImage:imageRef]; 

데이터는 UR 이미지의 당신은 .BMP 형식이 필요한 이유

+0

CGBitmapContextCreate (data, ...) 데이터 유형이 void *입니다. 나는 따라 할 수 있을까? NSData * jpegData = UIImageJPEGRepresentation (resizeImg, 0.7); 그리고 jpegData를 데이터에 전달 하시겠습니까? 그러면 비트 맵 파일을 가져올 수 있습니까? – MoonSoo

관련 문제