2010-10-11 24 views
0

hey les gars, je une grande image, et puis j'extraire une partie de l'image via:NSImage coordonner

[mBaseImage lockFocus]; 
NSBitmapImageRep* bitmapImageRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: NSMakeRect(startX,startY,width,height)]; 
[mBaseImage unlockFocus]; 

suivi de:

extractedImage = [[NSImage alloc] initWithSize:[bitmapImageRep size]]; 
[extractedImage addRepresentation:bitmapImageRep]; 

où extractedImage est NSImage *.

Plus tard alors que je suis en train de dessiner le extractedImage en utilisant NSDrawNinePartImage, j'ai réalisé que pendant que je les 9 parties spécifiant l'exemple à http://www.karlkraft.com/index.php/2007/11/14/nsdrawninepartimage/ j'ai réalisé que quand je spécifié 0,0 il montre le handcorner supérieur gauche de l'image, ce qui signifie que 0,0 est le coin supérieur gauche au lieu du coin inférieur gauche comme dans l'exemple du lien. J'ai essayé de régler le setFlipped, mais il semble que ce soit seulement en retournant l'image. Est-ce que quelqu'un a une idée de comment je peux obtenir les coordonnées à l'endroit où 0,0 est en bas à gauche? Oh et j'ai oublié de mentionner que j'utilise l'image comme un bouton, donc il est présenté comme un NSButton.

Cordialement, Han

+1

Que voulez-vous dire "c'est présenté comme un NSButton"? Il n'est pas possible de placer un NSImage dans la hiérarchie de vue, alors que faites-vous exactement avec l'image, et quel objet fait l'appel 'NSDrawNinePartImage'? –

+0

oh désolé. cela fait partie d'un NSButton personnalisé. Le NSButton personnalisé peut avoir un NSImage. drawRect est remplacé pour inclure une [image drawInRect: ....]; de sorte que l'image sera dessinée lorsque le bouton est affiché. Dans la fonction drawInRect, on vérifie si un flag useTile est positionné, si c'est le cas, drawInRect appellera alors une fonction drawWithTiles et fera le découpage approprié de l'image, les coordonnées telles que définies par l'utilisateur avant de passer les 9 images à NSDrawNinePartImage . – han

+0

L'exemple que vous suivez échouera sous un facteur d'échelle non intégral avec une indépendance de résolution. : -/Veuillez traiter le code que vous trouvez sur le web avec scepticisme. Il devrait utiliser NSBitmapImageRep comme les tuiles de destination au lieu de NSImage, car ce code est spécifiquement lié aux pixels. – Ken

Répondre

0

Ok je l'ai trouvé. C'était un voyou [image setFlip: ...] quelque part dans le code qui causait tout le mélange ..

+1

Veuillez noter que - [NSImage setFlipped:] est obsolète. Pour plus d'informations, consultez les notes de version d'AppKit à l'adresse http://developer.apple.com/library/mac/#releasenotes/Cocoa/AppKit.html. – Ken