NSImage NSBitmapImageRep nasıl dönüştürülür? Kodum var: NSImage to NSBitmapImageRep
- (NSBitmapImageRep *)bitmapImageRepresentation
{
NSBitmapImageRep *ret = (NSBitmapImageRep *)[self representations];
if(![ret isKindOfClass:[NSBitmapImageRep class]])
{
ret = nil;
for(NSBitmapImageRep *rep in [self representations])
if([rep isKindOfClass:[NSBitmapImageRep class]])
{
ret = rep;
break;
}
}
if(ret == nil)
{
NSSize size = [self size];
size_t width = size.width;
size_t height = size.height;
size_t bitsPerComp = 32;
size_t bytesPerPixel = (bitsPerComp/CHAR_BIT) * 4;
size_t bytesPerRow = bytesPerPixel * width;
size_t totalBytes = height * bytesPerRow;
NSMutableData *data = [NSMutableData dataWithBytesNoCopy:calloc(totalBytes, 1) length:totalBytes freeWhenDone:YES];
CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGContextRef ctx = CGBitmapContextCreate([data mutableBytes], width, height, bitsPerComp, bytesPerRow, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB), kCGBitmapFloatComponents | kCGImageAlphaPremultipliedLast);
if(ctx != NULL)
{
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:ctx flipped:[self isFlipped]]];
[self drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
[NSGraphicsContext restoreGraphicsState];
CGImageRef img = CGBitmapContextCreateImage(ctx);
ret = [[NSBitmapImageRep alloc] initWithCGImage:img];
[self addRepresentation:ret];
CFRelease(img);
CFRelease(space);
CGContextRelease(ctx);
}
}
return ret;
}
Çalışıyor, ancak bellek sızıntılarına neden oluyor. En azından ARC ile kullanırken.
initWithData:[nsimagename TIFFRepresentation]
'u kullanarak düzgün çalışmıyor. Bazı görsellerin temsilleri iyi değildir. Sanırım resmin biçimine ve renk alanına bağlı. Bunu başarmanın başka yolları var mı?
Sonucu mrwalker önerilen çözüm ile:
Orjinal resim: için
Dönüştürülen: bitmapimagerep ve geri resme 1 kez Çevrildi
bitm apimagerep ve sırt görüntüye 3 kez:
görüntü NSBitmapImageRep
dönüştürdükten sonra koyu her zaman alır Gördüğünüz gibi
Hockeyman, hala sorunuzun tam bir çözüm var mı? Çok fazla işlem yapmadan piksel renklerini tanımlamanın bir yolunu arıyorum. Belki de NSBitmapImageRep bana bir şekilde yardımcı olabilir. Teşekkürler. – RickON