redimensionner une image

crocodilcrocodil Membre
22:29 modifié dans API AppKit #1
Bonjour,
je suis nouveau dans le monde de la programmation objective-c/cocoa,
j'ai déja réussi a faire une calculatrice (qui marche parfaitement  ::))

l'étape suivante que j'aimerais atteindre est l'élaboration d'un tout simple programme qui permettrait de redimensionner la copie d'une image (pour ne pas travailler sur l'original) et de l'enregistrer sur le bureau sous un nom choisi (et format si possible);
j'ai suis déjà  arrivé a faire apparaitre dans une NSImageView l'image choisie par l'utilisateur ( par après j'aimerais qu'il soit possible de la glisser dedans..).
Mais je ne sais pas comment faire pour la redimensionner, je ne comprends pas quel méthode utiliser et comment l'utiliser :'( :'(
Quelqu'un peut-il éclairer ma lanterne ?
Merci beaucoup!

Réponses

  • AliGatorAliGator Membre, Modérateur
    22:29 modifié #2
    Hello et bienvenue sur Objective-Cocoa, collègue ! (ben oui, vu nos pseudos...)  ;)

    Fais déjà  une petite recherche sur les forums sur "NSImage" et "setSize" : Tu trouveras entre autres des sujets comme :
    - Qualité d'image (lors d'un redimentionnement
    - Image et Résolution
    - Redimentionner une image

    Bonne lecture ;)
  • crocodilcrocodil Membre
    juin 2007 modifié #3
    Bonjour, et merci, j'ai trouvé  ,
    mais cette fois je suis bloqué avec un PopUpButton,
    j'aimerais lui dire de faire certaines actions si telle cellule est choisie mais je ne sais pas comment faire, j'ai réussi a le faire pour un NSMatrix mais pas pour ce popupbutton...
    voici mon code:
    <br />NSCell* formatChoisi;<br />formatChoisi = [boutonChoisirFormat selectedCell];<br />if (formatChoisi == )<br />
    

    Où me suis-je trompé ?
    merci
  • BruBru Membre
    22:29 modifié #4
    Implante la méthode action de ton popupButton (dans IB, tire une ligne entre le bouton et son contrôleur, puis choisis la méthode qui va gérer le changement d'item du bouton).

    Ensuite, dans cette méthode, tu peux alors récupérer :
    - soit l'item sélectionné (un objet NSMenuItem) : méthode selectedItem.
    - soit le titre de l'item sélectionné : méthode titleOfSelectedItem.
    - soit l'index (ou ligne) de l'item sélectionné : méthode indexOfSelectedItem.

    .
  • crocodilcrocodil Membre
    22:29 modifié #5
    parfait merci  :-*,
    et encore une petite question,
    comment puis-je faire pour trouver le poids d'une image dont je n'ai que l'URL ?
    merci  o:)
  • schlumschlum Membre
    22:29 modifié #6
    dans 1182257103:

    parfait merci  :-*,
    et encore une petite question,
    comment puis-je faire pour trouver le poids d'une image dont je n'ai que l'URL ?
    merci  o:)


    [[NSData dataWithContentsOfURL:myURL] length];
    
  • crocodilcrocodil Membre
    22:29 modifié #7
    Il me met que la méthode 'length' a déja été déclarée plusieurs fois pourtant c'est la première fois que je l'utilise ! pourquoi ?
  • schlumschlum Membre
    22:29 modifié #8
    Sans voir le code, difficile à  dire...
  • BruBru Membre
    22:29 modifié #9
    dans 1182258128:

    [[NSData dataWithContentsOfURL:myURL] length];
    



    Schlum, le problème de ta soluce est que ça oblige à  télécharger l'image avant.
    Or, je ne sais pas si c'est ce que veux Crocodil.

    Sinon, via le couple NSURLRequest/NSURLResponse, tu peux obtenir du serveur (vers lequel pointe ton NSURL) la taille de la ressource que tu désires télécharger.

    .
  • crocodilcrocodil Membre
    22:29 modifié #10
    l'utilisateur choisit l'image dont j'aimerais connaitre la taille,...
    voci mon code :
    <br />	NSOpenPanel* openPanel = [NSOpenPanel openPanel];<br />	[openPanel setTitle:@&quot;Ouvrir une image...&quot;];<br />	int result = [openPanel runModalForTypes:[NSArray arrayWithObjects:@&quot;img&quot;, @&quot;jpeg&quot;, @&quot;jpg&quot;,@&quot;png&quot;,nil]];<br />	if(result!=NSOKButton)<br />		return;<br />		<br />	URL = [openPanel URL];<br />	[URL retain];<br />	monImage = [[NSImage alloc] initWithContentsOfURL:URL];<br />	[monImage retain];<br /> [image setImage:monImage];<br />&nbsp; NSSize dimensions = [monImage size]; // recupere la taille de l&#39;image<br />[hauteurActuelle setFloatValue:dimensions.height]; // affiche la hauteur ( il suffit de rajouter.height )<br />[largeurActuelle setFloatValue:dimensions.width]; // affiche la hauteur ( il suffit de rajouter.width )<br />
    
  • schlumschlum Membre
    22:29 modifié #11
    Ah c'est une URL file://

    Dans ce cas ->
    [[[NSFileManager fileSystemAttributesAtPath:[url path]] objectForKey:NSFileSize] longLongValue]
    


    Ca chope la taille du dataFork... Mais c'est carrément plus simple en C :P
  • crocodilcrocodil Membre
    22:29 modifié #12
    J'ai donc ceci, c'est juste ?
    <br />	NSOpenPanel* openPanel = [NSOpenPanel openPanel];<br />	[openPanel setTitle:@&quot;Ouvrir une image...&quot;];<br />	int result = [openPanel runModalForTypes:[NSArray arrayWithObjects:@&quot;img&quot;, @&quot;jpeg&quot;, @&quot;jpg&quot;,@&quot;png&quot;,nil]];<br />	if(result!=NSOKButton)<br />		return;<br />		<br />	URL = [openPanel URL];<br />	[URL retain];<br />	monImage = [[NSImage alloc] initWithContentsOfURL:URL];<br />	[monImage retain];<br /> [image setImage:monImage];<br />&nbsp; NSSize dimensions = [monImage size]; // recupere la taille de l&#39;image<br />[hauteurActuelle setFloatValue:dimensions.height]; // affiche la hauteur ( il suffit de rajouter.height )<br />[largeurActuelle setFloatValue:dimensions.width]; // affiche la hauteur ( il suffit de rajouter.width )<br />unsigned long long taille;<br />taille = [[[NSFileManager fileSystemAttributesAtPath:[URL]] objectForKey:NSFileSize] longLongValue]; // une erreur ici<br />[poidsOrigine setLongLongValue taille]; // une autre ici<br />
    


    Xcode me signale pourtant 2 erreurs, qu'ais-je mal fait ?
  • schlumschlum Membre
    22:29 modifié #13
    il manque l'appel "path" derrière "URL" (mauvais idée une variable qui commence par une majuscule...)
  • crocodilcrocodil Membre
    22:29 modifié #14
    je rajoute path mais il me met hélas :
    'NSFileManager' may not respond to '+filSustemAttributesAtPath:'

    et parse error before taille (quand je veux l'afficher dans poidsOrigine...)
    Que faire ?
  • schlumschlum Membre
    22:29 modifié #15
    "filSustemAttributesAtPath"
    Effectivement, si tu l'as écrit comme ça, ça ne m'étonne pas  :)
  • crocodilcrocodil Membre
    22:29 modifié #16
    non non , je l'ai bien écrit !
  • LeChatNoirLeChatNoir Membre, Modérateur
    22:29 modifié #17
    C'est pas une méthode de classe mais d'instance.
    Donc il faut allouer l'objet avant d'appeler cette méthode :
    [[NSFileManager defaultManager] fileSystemAttribut......];
  • schlumschlum Membre
    22:29 modifié #18
    Exact... J'ai allègrement zappé une étape  :)

    Ceci dit, la doc existe, et un peu de recherche pas soi même ne fait pas de mal...
  • LeChatNoirLeChatNoir Membre, Modérateur
    22:29 modifié #19
    ouais c'est vrai ça. C'est dégueulasse de poser des questions sans chercher un peu...

    Ok, je sors....
    :o
  • crocodilcrocodil Membre
    22:29 modifié #20
    excusez-moi  :'( ,
    la prochaine fois je chercherai plus , c'est promis
  • schlumschlum Membre
    22:29 modifié #21
    LeChatNoir plaisantait  ;)
    Mais regarde quand même du côté de l'application "AppKiDo"  :P
  • LeChatNoirLeChatNoir Membre, Modérateur
    22:29 modifié #22
    Ben ouais, sèches tes larmes crocodil  :P
    C'est juste que 10 mn avant, j'ai posé une question en avouant n'avoir fait aucune recherche.... (bouuuuhhh)
  • crocodilcrocodil Membre
    22:29 modifié #23
    Cette application me parait assez bien mais ne marche pas chez moi (10.3.9) :(;

    Cette fois-ci tout marche parfaitement dans mon application qui redimensionne des images sauf une chose (dont j'ai cherché partout la solution ;)),
    elle ne marche pas si je lui demande une valeur de plus de 736 de largeur et de plus de 556 de largeur pour mon image; elle me l'enregistrera mais a la taille de l'image d'origine !,
    si je met des valeurs plus petites pas de problèmes !,
    pourtant dans mon code , je n'ai mis aucune restriction....
    Auriez-vous une idée d'où pourrait venir le problème ?,
    j'ai deja essayé de remplacer les float que j'utilisais pour ces dimensions par des double mais rien....
  • MulotMulot Membre
    22:29 modifié #24
    Peut être la taille de ta fenêtre où l'image agrandie est censée être affichée ? Quelle est la taille d'origine de ton image ?
  • Eddy58Eddy58 Membre
    22:29 modifié #25
    dans 1182360533:

    pourtant dans mon code , je n'ai mis aucune restriction....
    Auriez-vous une idée d'où pourrait venir le problème ?,

    On est pas devin, montre le nous ton code de redimensionnement... ;)
  • crocodilcrocodil Membre
    22:29 modifié #26
    ah non, j'ai trouvé, c'est NSImage qui ne gère pas les images de plus de 70 pp ...
    merci 
Connectez-vous ou Inscrivez-vous pour répondre.