进入NSImage的像素数据

时间:2010-07-20 11:20:15

标签: cocoa cgimage nsimage nsbitmapimagerep

我正在编写可在黑白图像上运行的应用程序。我是通过将NSImage对象传递给我的方法然后从NSImage制作NSBitmapImageRep来实现的。所有的工作,但很慢。这是我的代码:

- (NSImage *)skeletonization: (NSImage *)image
{
    int x = 0, y = 0;
    NSUInteger pixelVariable = 0;

    NSBitmapImageRep *bitmapImageRep = [[NSBitmapImageRep alloc] initWithData:[image TIFFRepresentation]];

    [myHelpText setIntValue:[bitmapImageRep pixelsWide]];
    [myHelpText2 setIntValue:[bitmapImageRep pixelsHigh]];

    NSColor *black = [NSColor blackColor];
    NSColor *white = [NSColor whiteColor];
    [myColor set];
    [myColor2 set];

    for (x=0; x<=[bitmapImageRep pixelsWide]; x++) {
        for (y=0; y<=[bitmapImageRep pixelsHigh]; y++) {
            // This is only to see if it's working
            [bitmapImageRep setColor:myColor atX:x y:y];
        }
    }

    [myColor release];
    [myColor2 release];

    NSImage *producedImage = [[NSImage alloc] init];
    [producedImage addRepresentation:bitmapImageRep];
    [bitmapImageRep release];

    return [producedImage autorelease];
}

所以我尝试使用CIImage,但我不知道如何通过(x,y)坐标进入每个像素。这非常重要。

1 个答案:

答案 0 :(得分:0)

使用NSImage的@JsonDeserialize数组属性来获取NSBitmapImageRep。它应该比将图像序列化为TIFF然后再返回更快。

使用public class Command { ... @JsonDeserialize(using = RawJsonDeserializer.class) private String response; ... } public class RawJsonDeserializer extends JsonDeserializer<String> { @Override public String deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { ObjectMapper mapper = (ObjectMapper) jp.getCodec(); JsonNode node = mapper.readTree(jp); return mapper.writeValueAsString(node); } } 的{​​{1}}属性直接访问图像字节。

例如

representations

在播放图像数据之前,您需要知道图像中使用的像素格式,请查看NSBitmapImageRep的bitmapData属性,以帮助确定图像是否为RGBA格式。

您可能正在处理灰度图像,RGB图像或CMYK。然后将图像转换为您首先要的图像。或者以不同的方式处理循环中的数据。