[cocoa] NSImageCompressionFactor
4 mei 2005 - 22:10   
geplaatst door: BraboMac
Ik heb in cocoa een NSImageView waarin een plaatje staat. Dit plaatje sla ik op als jpeg file. Echter de file werd kleiner dan de originele file, met duidelijk kwaliteitsverlies. Dit kan voorkomen worden door op te slaan met de property NSImageCompressionFactor. Nu kan ik die factor gemakkelijk op 1.0 (hoogste kwaliteit) zetten, maar dan wordt de file weer veel groter dan het origineel. Deze code gaat het om:

NSBitmapImageRep *jpegImage = [[[imageView image] representations] objectAtIndex:0];
NSNumber *factor = [NSNumber alloc];
factor = [jpegImage valueForProperty:NSImageCompressionFactor];
NSDictionary *dict = [NSDictionary dictionaryWithObject:factor forKey:NSImageCompressionFactor];
NSData *data = [jpegImage representationUsingType:NSJPEGFileType properties:dict];
[data writeToFile:bestandsnaam atomically:YES];

De regel factor = ... levert nil op, in plaats van een float tussen 0.0 en 1.0. Deze nil geeft in de NSDictionary weer een fout waardoor er helemaal niks wordt opgeslagen. Google is ook verdacht stil over dit onderwerp.

Kan iemand mij vertellen waar mijn denkfout zit?

Big Nerd Ranch blogs for Mac developers (and Nerds)
Er bestaan slechts 10 soorten mensen op deze aarde: Zij die binair kunnen rekenen en zij die dat niet kunnen.
[cocoa] NSImageCompressionFactor
5 mei 2005 - 00:26    reactie #1
geplaatst door: Kool
Even snel (dus niet gecheckt in de Cocoa docs) maar ik vind het verdacht dat je een NSBitmapImageRep declareert. Je kan die pointer dan wel jpegImage noemen, maar dat maakt het nog geen jpeg! jpegImage is een bitmap, en waarschijnlijk ook daarom dat je nil terugkrijgt voor NSImageCompressionFactor. Bij het wegschrijven maak je er nu weer een jpeg van. Je bent dus heen en weer aan het coderen. Is er niet iets als een NSJpegImageRep? Ik denk dat je het daar moet zoeken.
Hoe Kool Super Kool werd... zal nu na het opschonen van het forum een raadsel blijven voor wie dit nog niet wist.
[cocoa] NSImageCompressionFactor
5 mei 2005 - 21:07    reactie #2
geplaatst door: BraboMac
Hmm, jij wil zeggen dat het pas JPEG wordt als ik een aantal regels na factor = ... de NSData ga aanmaken. Daar geef ik aan dat het JPEG moet worden. In dat geval is de denkfout dat als ik een JPEG image file inlaad, deze niet als jpeg in het geheugen blijft. In plaats daarvan wordt het bestand naar NSImageView formaat geschreven?

Op zoek naar het antwoord probeer ik het plaatje uit de NSImageView naar mijn desktop te slepen, maar dat lukt ook niet. Ik heb "editable" aan staan. Plaatje erin slepen lukt wel. Is dit ook een indicatie dat NSImageView nog geen -in het filesystem bekend- image formaat heeft?

Big Nerd Ranch blogs for Mac developers (and Nerds)
Er bestaan slechts 10 soorten mensen op deze aarde: Zij die binair kunnen rekenen en zij die dat niet kunnen.
[cocoa] NSImageCompressionFactor
6 mei 2005 - 01:09    reactie #3
geplaatst door: Kool
Citaat
While an NSImageRep subclass can be used directly, it’s typically used through an NSImage object. An NSImage manages a group of representations, choosing the best one for the current output device.

Waarom gebruik je eigenlijk een NSImageRep en niet gewoon een NSImage? Dat lijkt de aanbevolen manier volgens bovenstaand citaat uit de docs van Cocoa.

Hoe Kool Super Kool werd... zal nu na het opschonen van het forum een raadsel blijven voor wie dit nog niet wist.