NSAffineTransform sur une image... Possible ?

LeChatNoirLeChatNoir Membre, Modérateur
12:29 modifié dans API AppKit #1
Salut !

Je tente de créer une animation sur une des images de mon appli.

J'ai une NSImageView sur ma fenêtre et sur un évènement (click), j'affecte une image particulière à  cette NSImageView.

J'aimerai faire une animation.
Je vais la faire avec un timer qui appelera une methode qui se chargera d'appliquer une transformation (genre rotation + scale) à  cette image.

Seulement voilà , comment appliquer une transformation à  une image ?

En fait, j'arrive à  locker une image, définir une transformation et tracer genre un rectangle ou du texte puis delocker le focus sur l'image.

Là , ca me fait ce qu'il me faut, à  savoir image normal et texte ou rectangle tracé selon la transformation.

Mais là , mon problème est différent.

J'aimerai appliquer la transformation à  l'image elle même.
Genre j'ai mon image normale et je veux faire un scale de 0.5 sur l'axe des X + rotation.

J'ai tenté :

;NSAffineTransform * etc ...etc.. (définition de la transfo).[etc concat];[img unlockFocus];Ca marche pas :-(Une idée ?[/img]

Réponses

  • 12:29 modifié #2
    Un truc dans le genre:
    [tt][NSGraphicsContext saveGraphicsState];
    NSAffineTransform *at = ....
    ...
    [at concat];
    tt]Mais si tu utilises une imageView, tu peux toujours utiliser les méthodes setFrameRotation & co de NSView
  • LeChatNoirLeChatNoir Membre, Modérateur
    12:29 modifié #3
    Ok merci renaud.
    Je vais regarder ça.

    Par contre, le bout de code devra être entre [MonImageView lockFocus] et unlock non ?

    Sinon, le DrawAtPoint se fait où ? Ca change direct l'image ?
  • janvier 2006 modifié #4
    drawAtPoint est seulement le début de la méthode, je n'ai pas mis la suite car j'avais la flemme de chercher dans la doc et que l'autocomplétion pour les méthodes cocoa ne marche pas dans OmniWeb.

    Ce code se mets dans le drawRect de la vue dans laquelle tu veux dessiner ton image. Pas besoin d'utilise (un)lockFocus.
Connectez-vous ou Inscrivez-vous pour répondre.