एनएसआईमेज को NSBitmapImageRep में कैसे परिवर्तित करें? मेरे पास कोड है:NSImage से 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;
}
यह काम करता है, लेकिन यह स्मृति रिसाव का कारण बनता है। कम से कम जब मैं इसे एआरसी के साथ उपयोग कर रहा हूं। initWithData:[nsimagename TIFFRepresentation]
का उपयोग करना यह सही ढंग से काम नहीं कर रहा है। कुछ छवियों के प्रतिनिधित्व अच्छे नहीं हैं। मुझे लगता है कि यह छवि के स्वरूप और रंगस्थान पर निर्भर करता है। क्या इसे हासिल करने के कोई अन्य तरीके हैं?
mrwalker द्वारा सुझाए गए समाधान के साथ परिणाम:
मूल छवि:
bitmapimagerep और वापस छवि के लिए 1-समय पर परिवर्तित:
में रूपांतरित बी आई टी एम apimagerep और वापस छवि के लिए 3 बार:
आप छवि NSBitmapImageRep
को परिवर्तित करने के बाद गहरा हो जाता है हर बार देख
Hockeyman, आप अभी भी अपने प्रश्न का पूर्ण समाधान क्या है? मैं बिना किसी प्रक्रिया के पिक्सल रंगों की पहचान करने का एक तरीका ढूंढ रहा हूं। शायद NSBitmapImageRep किसी भी तरह से मेरी मदद कर सकता है। धन्यवाद। – RickON