2010-12-08 3 views
0

비트 맵을 메모리에 만들고 일부 픽셀 값을 설정 한 다음 해당 이미지를 디스크에 저장하고 싶습니다.코코아 파일로 렌더링

지금까지 나는 NSBitmapImageRep 있습니다

image = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL 
               pixelsWide:width 
              pixelsHigh:height 
              bitsPerSample:8 
              samplesPerPixel:4 
                hasAlpha:YES 
                isPlanar:NO 
              colorSpaceName:NSDeviceRGBColorSpace 
               bytesPerRow:0 
               bitsPerPixel:0]; 

그리고 단순히과 같이 일부 픽셀을 추가

NSColor *color = [NSColor colorWithDeviceRed:1.0 
             green:1.0 
             blue:1.0 
             alpha:1.0]; 


[image setColor:color 
      atX:x 
       y:y]; 

을 그리고 결국 이상적인하지만 좋은하지 않은 TIFF로 (이미지를 저장 시작)

NSData* TIFFData = [image TIFFRepresentation]; 
[TIFFData writeToFile:@"/temp/image.tiff" atomically:YES]; 

이 코드에서 저장 한 이미지는 실제로 비어 있으며 일부만 보여줍니다 왼쪽 위 모서리의 픽셀. 나는 바퀴가 어디에서 빠져 나가는 지 모르겠다. 그러나 나는 이것이 틀린 길로 나가는 것이 분명해 보인다.

답변

0

나는 정확히 샘플에 어떤 문제가 있는지 모르겠지만, 이런 식으로 문제를 접근하는 것입니다 :이 시도를 줄 것이다

NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(width, height)]; 
[image lockFocus]; // All drawing commands until unlockFocus target this image. 
[[NSColor redColor] set]; 
NSRectFillUsingOperation(NSMakeRect(x, y, 1, 1), NSCompositeSourceOver); 
[image unlockFocus]; 
NSData *data = [image TIFFRepresentation]; 
[data writeToFile:@"/temp/image.tiff" atomically:YES]; 
[image release]; 
+0

. 채우기 작업을 사용하지 않고 단일 픽셀을 인쇄하는 방법이 있습니까? 나는 그 접근법에 오버 헤드가있을 것이라고 확신한다. – Nippysaurus

+0

나는 그렇게 생각하지 않는다. 그러나 당신이 그 수준의 성능에 대해 걱정한다면 "[image setColor : color atX : x y : y]"도 아마 너무 느릴 것입니다. 이 시점에서 비트 맵 이미지 rep에 대한 데이터를 malloc 버퍼로 할당하고 직접 버퍼에 쓴 다음 이미지 담당자를 만들어 즉시 저장하려고합니다. –