Utiliser Quicktime avec un NSData
Cyberbob
Membre
Salut tout le monde,
Cela fait des mois et des mois, que je me suis mis à regarder le Framework Quicktime. Bon, j'avoue, je n'ai pas regardé pendant 2 mois non-stop !! :P
Mais bon, j'ai essayé de faire une petite routine me permettant d'importer mon NSDATA qui contient une image TIFF CMJN, et ensuite, l'utiliser pour exporter cette image dans un autre NSDATA différent. J'utilise cette méthode pour pouvoir notamment changer la résolution de l'image.
Bref, je n'arrive pas à mettre image dans un Graphics Component.
Voici mon code :
J'ai une belle erreur au niveau de la ligne :
Une ame charitable peut t'il m'aider ? Je vous avoue que je ne comprend rien au Handle, au DataRef. Je ne trouve pas de doc explicite sur le sujet.
Merci d'avance..
Cela fait des mois et des mois, que je me suis mis à regarder le Framework Quicktime. Bon, j'avoue, je n'ai pas regardé pendant 2 mois non-stop !! :P
Mais bon, j'ai essayé de faire une petite routine me permettant d'importer mon NSDATA qui contient une image TIFF CMJN, et ensuite, l'utiliser pour exporter cette image dans un autre NSDATA différent. J'utilise cette méthode pour pouvoir notamment changer la résolution de l'image.
Bref, je n'arrive pas à mettre image dans un Graphics Component.
Voici mon code :
-(BOOL)NewQuickImage:(NSBitmapImageRep*) imageRep<br />{<br /><br /> NSData *TIFFData = [imageRep representationUsingType:NSTIFFFileType properties:nil];<br /> if (TIFFData == nil)<br /> NSLog(@"Impossible d'ouvrir le BMPData");<br /> else<br /> {<br /> Handle TIFFDatah = NULL;<br /> PtrToHand([TIFFData bytes],&TIFFDatah,[TIFFData length]);<br /> ComponentInstance importComponent = 0,exportComponent = 0;<br /> OSErr err = GetGraphicsImporterForDataRef(TIFFDatah,HandleDataHandlerSubType,&importComponent);<br /> if (err == noErr)<br /> {<br /> Handle newTIFFH = NewHandle(0);<br /> GraphicsExportSetInputGraphicsImporter(exportComponent,importComponent);<br /> GraphicsExportSetOutputHandle(exportComponent,newTIFFH);<br /> GraphicsExportSetResolution(exportComponent,150,150);<br /> unsigned long actualSizeWritten = 0;<br /> err = GraphicsExportDoExport(exportComponent,&actualSizeWritten);<br /> <br /> if (err = noErr)<br /> {<br /> HLock(newTIFFH);<br /> NSData *NewData = [[NSData alloc] init];<br /> NewData = [NSData dataWithBytes:*newTIFFH length:GetHandleSize(newTIFFH)];<br /> [NewData writeToFile:@"/test.tif" atomically:YES];<br /> HUnlock(newTIFFH);<br /> }<br /> <br /> }<br /> }<br />}<br />
J'ai une belle erreur au niveau de la ligne :
OSErr err = GetGraphicsImporterForDataRef(TIFFDatah,HandleDataHandlerSubType,&importComponent);
Une ame charitable peut t'il m'aider ? Je vous avoue que je ne comprend rien au Handle, au DataRef. Je ne trouve pas de doc explicite sur le sujet.
Merci d'avance..
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
OSType HandleDataHandlerSubType = FOUR_CHAR_CODE('hndl');
effectivement HandleDataHandlerSubType ne semble pas etre défini dans ton code
Il me semblait que HandleDataHandlerSubType était défini dans le framework Quicktime.
Enfin, je vous ai écouté, je l'ai rajouté, mais toujours pareil. En fait, si je debug, j'ai un erreur : 'Program Received Signal : EXC_BAD_ACCESS'
au niveau de la ligne
Dans le Run Log : j'ai ça :
alors c'est bien possible et vu ton message d'erreur ca ne semble effectivement pas venir de là !
Si ca marche pas, peux tu poster un petit projet de test avec une image en entrée à ta méthode ? (j'ai la flemme d'en écrire un )
J'ai un doute sur &TIFFDatah
Essaye:
Mais sans garantie :-*
[edit]
Le &TIFFDataH semble justifié, non ?
Cependant, lors du build, j'ai un warning sur le deuxieme argument de PtrToHand...
Alors du coup, ca passe, sauf que j'ai une erreur -50 qui n'existe pas dans la liste d'Apple des OSErr !
Et puis, je viens de voir la réponse de Core, il me semble aussi que j'utilise le bon passage de paramètre.
En fait, je pensais que mon code était mauvais. Je ne sais vraiment plus trop vers quoi me tourner...
tu as lu la TN 1195 ?
http://developer.apple.com/technotes/tn/tn1195.html
tu as essayé avec les 2 PtrToHand ? ca donne quoi ?
il faut donc bien passer l'adresse du dataRef
Bon deuxième tentative ;D
Un dataRef est un handle qui contient un handle
j'ai bon ??
Alors j'ai essayé les deux PtrToHand, pas d'erreur (err = 0). En revanche, ca ne résout pas le problème.
Pour répondre à ta question, j'avais lu une note sur un mec qui avait fait une fonction basée sur la TN.
Mais je n'avais pas trouvée la TN en question, je pense que c'est celle la, alors je vais la lire de ce pas.
if (err = noErr) au lieu de if (err == noErr) je pense
je vais regarder de mon coté sinon ...
bien joué amnesic
GraphicsExportSetResolution(exportComponent,150,150);
C'est la résolution (genre passé de 300dpi en 72 dpi) ou bien taille de l'image ?
car par exemple pour 72dpi il faudrait faire
GraphicsExportSetResolution(exportComponent, 0x00480000, 0x00480000) d'après la doc ..
alors je me demande si il n'y a pas confusion de ta part entre résolution et définition ?
Enfin, heureusement que tu l'as vu, parce que j'ai l'impression de ne plus rien voir a force de cherche ce qui ne vas pas !
Va falloir :fouf): !!
Tu as tout a fait raison sur l'emploi de la méthode, je suis aller un peu vite. (Cyberbob) En fait, j'ai mis cette ligne rapidement, mais le plus important pour moi c'est d'avoir un GraphicsImporter qui soit bien renseignée, afin d'utilise le graphicsExporter pour pourvoir exporter mon image dans une résolution différente de celle de départ.
Je parle bien de résolution d'image, c'est à dire la valeur représentant le nombre de points par pouce.
Evidemment, ca ne change pas la taille de l'image (en pixels) mais bien la taille d'impression de l'image, lors de l'envoi en impression !
Donc il faudra que je convertisse à chaque fois la résolution que je veux en héxa..
Suis-je un peu plus clair ?
Complètement ! je ne sais pas pourquoi en voyant 150 x 150 je croyais que tu voulais faire des vignettes et donc changer la taille de l'image...allez fais tourner :fouf): !
Bon sinon ton exportComponent semble tjrs a nil ...bref doit manquer un truc à initialiser ...je continue mes investigations ....
Mon petit doigt me dit que l'on va adorer Core Image ..mais chut encore 2j
En tout cas, merci beaucoup. D'ailleurs pour aider qq'un si jamais il aurait envie d'utiliser quicktime pour gérer des images, je vais poster d'ici un jour des bouts de codes pour obtenir des informations sur les images..
Qui sait, ca peut aider ?
PS : Joli le X2Fix , connaissais pas moi ???
Sauf que nulle part je ne vois le paramètres LZW. Quand je demande à mon graphics Exporter les settings du format TIFF, dans la liste je n'ai pas LZW. J'ai que PackBits.
Et ce que vous aussi , vous avez ça ?
PS : J'ai mis à jour Quicktime.. (faut t'il une version PRO ?? )