[résolu] Construire une image à  partir de texte+image

LeChatNoirLeChatNoir Membre, Modérateur
janvier 2006 modifié dans API AppKit #1
Salut,
Je me posais une question à  la con pour le jour de l'an :-) (au fait, bonne année à  tous !) :
* comment, à  partir d'une image et d'un texte (voire une Attributed String), je peux construire une seule NSImage.

Je m'explique :
J'ai une NSImage qui contient un icone,
Une NSString qui contient le texte de l'élément.

Lors d'un drag&Drop dans une outlineView, j'aimerai remplacer l'image du drag par une image à  moi qui résulterai de la composition de l'image avec le texte accolé au bout.

Dans la méthode qui permet de mettre une image perso lors du drag, je connais l'icone, j'ai moyen de récup' le texte qui va bien mais :

* comment mettre les 2 dans un objet NSImage sachant que je veux mettre l'icone et le texte à  coté et positionné au centre verticalement ?

Je le fait dans le DrawRect de la cellule de mon outline mais en le dessinant direct dans la vue.

J'aimerai faire la même chose mais que ca me mette ca dans une NSImage.

Y a moyen ?
a+

Réponses

  • janvier 2006 modifié #2
    Il me semble que fouf en avait déjà  parlé.

    Tu peux faire un truc du genre :

    <br />NSDictionary *attrs=nil;<br />NSFont *font=[NSFont fontWithName:@&quot;Lucida Grande Bold&quot; size:13];<br />if (font)<br />	attrs=[NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,nil];<br /><br /><br />NSString *STR=@&quot;toto&quot;;<br />NSSize STRSize=[STR sizeWithAttributes:attrs];<br /><br />[miniImage lockFocus];<br />	{<br />	[img compositeToPoint:NSMakePoint(0.0,0.0) fromRect:NSMakeRect(0.0,0.0,imgSz.width,imgSz.height) operation:NSCompositeSourceOver];<br />	[STR drawAtPoint:NSMakePoint(imgSz.width + 10,(int)((miniImageSize.height - STRSize.height)/2.0)) withAttributes:attrs];<br />	}<br />[miniImage unlockFocus];<br /><br />
    


    MiniImage est un nouveau NSImage.

    Non non, ça fonctionne pas :p
  • LeChatNoirLeChatNoir Membre, Modérateur
    12:37 modifié #3
    ah bon ?
    En fait je considère mon NSImage comme une vue et je fais des draw dedans ?

    Ca foncitonne ça ?
  • janvier 2006 modifié #4
    Si ce que tu veux est déjà  bien présenté dans ta view:

    dataWithPDFInsideRect:
    Returns PDF data that draws the region of the receiver within aRect.
    - (NSData *)dataWithPDFInsideRect:(NSRect)aRect
    Discussion
    This data can be placed on an NSPasteboard, written to a file, or used to create an NSImage object.

    Je ne pourrais le dire plus clairement donc, je me limite au copier/coller ;)
  • janvier 2006 modifié #5
    dans 1136285429:

    ah bon ?
    En fait je considère mon NSImage comme une vue et je fais des draw dedans ?

    Ca foncitonne ça ?



    En cocoa, tu ne dessines jamais dans une view, mais dans un graphiccontext, et ensuite le contenu de ce contexte peut etre appliqué à  une view ou une image.
  • LeChatNoirLeChatNoir Membre, Modérateur
    12:37 modifié #6
    Ok, merci bien les gars !

    J'avais tenté le dataWithPDF avec succès mais 2 pb :
    * ca choppe le fond (alors que je veux une image avec transparence lors du drag),
    * quand l'item est sélectionné, ca choppe la couleur de sélection.

    Bref, j'essayerai cette hitoire de faire des draw dans une NSImage.
    Enfin je voulais dire dans un "graphic context que j'appliquerai à  une image" pour être aussi précis que Renaud.

    Mais cette histoire de graphic context, c'est transparent non ? On appelle les méthodes draw... des NSView la plupart du tps...
  • LeChatNoirLeChatNoir Membre, Modérateur
    12:37 modifié #7
    Slt les gars,

    J'ai expérimenté et ca marche  ;)

    A qques détails près (genre il faut régler la taille de la nouvelle image, la copier et autres subtilités que j'ai découvert sur les NSImage et autres représentations...).

    Merci encore !  <3 <br />
Connectez-vous ou Inscrivez-vous pour répondre.