Quartz remplacer KillPicture() de QuickdrawAPI.h

laudemalaudema Membre
15:16 modifié dans Objective-C, Swift, C, C++ #1
Bonjour,

  Je voudrais utiliser le code offert par twain.org à  http://twain.org/mac.shtm dans l'application TwainClientCocoa mais j'ai un warning dont je voudrais me débarrasser à  cause de la fonction KillImage() [tt]deprecated[/tt].

<br />- (IBAction)Aquire:(id)sender<br />{<br />&nbsp; &nbsp; PicHandle hPict;<br /><br />&nbsp; &nbsp; TWAcquire ( &amp;hPict );<br />&nbsp; &nbsp; if (hPict)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; NSImage* image;<br />&nbsp; &nbsp; &nbsp; &nbsp; HLock((Handle)hPict);<br />&nbsp; &nbsp; &nbsp; &nbsp; image = [[NSImage alloc] initWithData:[NSData dataWithBytes:*hPict length:GetHandleSize((Handle)hPict)]];<br />&nbsp; &nbsp; &nbsp; &nbsp; HUnlock((Handle)hPict);<br />&nbsp; &nbsp; &nbsp; &nbsp; [mImage setImage:image];<br />&nbsp; &nbsp; &nbsp; &nbsp; [image release];<br />&nbsp; &nbsp; &nbsp; &nbsp; KillPicture(hPict);<br />&nbsp; &nbsp; }<br />}<br />

Si je ne peux pas trouver de solution pour "tuer" le PicHandle j'aurais aimé le remplacer.
Un picHandle est un pointeur sur un pointeur sur une structure, si j'ai bien compris l'entête et les pointeurs ...
<br />struct Picture {<br />&nbsp; short&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  picSize;<br />&nbsp; Rect&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; picFrame;<br />};<br />typedef struct Picture&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Picture;<br />typedef Picture *&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  PicPtr;<br />typedef PicPtr *&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PicHandle;<br />struct MacPolygon {<br />&nbsp; short&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  polySize;<br />&nbsp; Rect&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; polyBBox;<br />&nbsp; Point&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  polyPoints[1];<br />};<br />

Mais je n'ai pas trouvé de telle structure dans Quartz et je ne sais pas par quoi la remplacer puisque TWAcquire(&hPict) et le reste du code en C attendent ça.

Réponses

  • CéroceCéroce Membre, Modérateur
    15:16 modifié #2
    Dommage, j'ai jeté mon livre sur le développement sous Classic il y a deux semaines...

    Quelques infos:
    - les handles sont bien des pointeurs de pointeurs, autrefois nécessaires pour permettre de déplacer les blocs de mémoire et éviter sa fragmentation. C'est totalement inutile aujourd'hui. HLock() sert (servait) à  verrouiller le bloc à  son adresse courante, pour pouvoir se servir directement du pointeur.

    - sous Classic, il existait le format PICT, un format plus ou moins vectoriel. D'après mes souvenirs, c'est à  ça que correspond un PicHandle. La méthode -[NSImage initWithData:] doit savoir utiliser les données du format PICT. Premier problème: il me semble que le support du PICT a été retiré dans Cocoa depuis le passage au 64 bits.

    Sinon, voici le format, on trouve au moins une correspondance avec ta structure.
    http://www.fileformat.info/format/macpict/egff.htm

    Le problème, c'est qu'une Picture ne peut certainement pas être seulement ce qui est décrit dans la structure: il y a forcément des infos après, ne serait-ce que la bitmap numérisée par le scanner.


    Bref, désolé, mais je ne vois pas comment remplacer KillPicture(). Essaie plutôt de trouver une bibliothèque Twain un poil plus moderne. ça fait quand même dix ans qu'on est passé à  Mac OS X et Quartz.

  • laudemalaudema Membre
    15:16 modifié #3
    Merci Céroce. Cette librairie est en fait celle qui est sur le site de twain.org sur la page destinée au mac.
    Avec l'abonnement developer on a droit à  deux "Technical Support Incident" est ce que je ne pourrais pas en utiliser un pour ça ?
    Pour l'instant je ne sais pas encore à  quoi ça peut servir à  vrai dire, je vais donc essayer de ce pas !
  • CéroceCéroce Membre, Modérateur
    mai 2011 modifié #4
    dans 1305731995:

    Avec l'abonnement developer on a droit à  deux "Technical Support Incident" est ce que je ne pourrais pas en utiliser un pour ça ?

    Je ne pense vraiment pas. Habituellement, ça permet d'avoir un ingé qui t'aide à  résoudre un problème technique, mais là , Twain a laissé sa lib à  l'abandon, et ne vont pas la mettre à  jour pour tes beaux yeux. Je suis sûr que quelqu'un d'autre a créé une lib Twain.

    Même le site web peut être daté de 2001, preuve en est la photo minuscule d'iMac G3.
  • laudemalaudema Membre
    15:16 modifié #5
    C'est frustrant: si j'utilise ImageKit quand je scanne un document j'ai toujours un fond légèrement  bleuté et tous les défauts qui ressortent alors que quand je prends TWAIN j'ai un fond blanc comme l'original et en bougeant les réglages je peux éliminer assez bien de défauts. C'est très facile à  voir avec un petit scanner Epson, le résultat est meilleur avec Epson Scan qu'avec Transfert d'Images.

    Je vais quand même leur demander ce que je peux faire, peut être qu'ils connaissent justement une librairie TWAIN plus récente ou qu'ils ont un moyen de mieux contrôler le scanner via ImageCaptureCore.framework que je n'ai pas vu.
    De toutes façons je n'ai plus que 2 mois pour utiliser mes deux jetons de support ;)
Connectez-vous ou Inscrivez-vous pour répondre.