pb avec initWithFocusedViewRect

cbrandtcbrandt Membre
23:34 modifié dans API AppKit #1
salut à  tous...

j'ai une vue dont je voudrais récupérer l'apparence dans une image. je fais donc ça:
<br />	[view lockFocus];<br />	rep = [[NSBitmapImageRep alloc] initWithFocusedViewRect: [view bounds]];<br />	[view unlockFocus];<br />	image = [[NSImage alloc] initWithSize: [view bounds].size];<br />	[image addRepresentation: rep];<br />	[rep release];<br />


le seul pb. c'est que si la vue est partiellement masquée (elle fait partie d'une scrollview par exemple), je ne récupère pas le contenu réel de la vue, mais plutôt ce qu'il y a à  cet endroit dans la fenêtre... et je me retrouve avec des bouts de scroller dans mon image, avec ma vue incomplète  :'( :'(

j'ai alors essayé de retirer la vue de sa hierarchie pour la mettre en taille complète dans une nouvelle fenêtre (en dehors de l'écran), mais un autre pb survient quand je la remets dans sa hierarchie d'origine... (c'est la sous-sous-sous-sous vue d'une autre vue, qui gère ses sous-vues elle-même)

quelqu'un aurait une solution ?  :why?: :why?: :why?: :why?:

Réponses

  • fouffouf Membre
    23:34 modifié #2
    Tu copies la vue au lieu de l'extraire ?
  • cbrandtcbrandt Membre
    23:34 modifié #3
    déjà  essayé: la vue en question ne supporte pas copyWithZone...
  • mpergandmpergand Membre
    mars 2005 modifié #4
    Et en PDF ça te vas pas  :)

    <br />NSView* view=[[textView superview] documentView];<br />NSData* data=[textView dataWithPDFInsideRect:[view bounds]];<br />// sauvegarde en pdf<br />[data writeToFile:@&quot;image.pdf&quot; atomically:NO];<br />
    


    Sinon on peut convertir:
    <br />NSImage* image=[[NSImage alloc] initWithData:data];<br />NSData* tiffData=[image TIFFRepresentation];<br />[tiffData writeToFile:@&quot;image.tiff&quot; atomically:NO];<br />[image release];<br />
    


    Ca aussi ça marche, mais c'est plus bidouille, je trouve :
    <br />NSView* view=[[textView superview] documentView];<br />NSImage* image = [[NSImage alloc] initWithSize: [view bounds].size];<br />[image lockFocus];<br />[view drawRect:[view bounds]];<br />[image unlockFocus];
    


    [edit] pourquoi faire simple quand on peut faire compliqué:

    NSView* view=[[textView superview] documentView];
    view est égal à  ....... textView

    MDR  :)
  • cbrandtcbrandt Membre
    23:34 modifié #5
    ah ben merci mpergand !

    <br />	image = [[NSImage alloc] initWithSize: [view bounds].size];<br />	[image lockFocus];<br />	[view drawRect: [view bounds]];<br />	[image unlockFocus];<br />
    


    ça marche impec' !

    pourtant il me semblait que j'avais aussi essayé cette méthode, mais quelque part ça n'allait pas...  en tout cas maintenant c'est tout bon.
Connectez-vous ou Inscrivez-vous pour répondre.