Bonjour,
La question est dans le sujet.
Je parviens à écrire des IFD publics mais je coince pour écrire un IFD privé.
Existe-t-il un moyen simple ? Ou faut-il procéder "sauvagement" :
1° :
Créee un tag privé dans le premier IFD contenant l'offset de l'IFD privé (j'arrive à créer ce tag mais ne sais pas comment lui mettre la bonne valeur)
2° :
Comment rendre un IFD privé ? Je suppose qu'il faut doner la valeur zéro à NextIfdOffset dans le dernier IFD public mais comment faire ? Enfin, comment passer une image vide à cet IFD ?
Ci-dessous un exemple de code.
Merci...
import com.sun.media.jai.codec.*;
import java.awt.image.renderable.ParameterBlock;
import java.io.*;
import javax.media.jai.*;
import java.util.*;
public class CreateTiff {
/**
* Converts a image file to TIFF and adds a private IFD
* @param fileName file to be converted
* @param tiffFile TIFF file to create
*/
public void createTiffMf(File fileName, File tiffFile) {
String documentName="blabla";
short typeImage=1;
FileSeekableStream stream;
RenderedOp img;
TIFFEncodeParam encodeParam = new TIFFEncodeParam();
TIFFEncodeParam tmpEncodeParam = new TIFFEncodeParam();
ParameterBlock pb = new ParameterBlock();
Vector<TIFFField> tagsPriv = new Vector<TIFFField>();
Vector extraImgList = new Vector();
try {
// PUBLIC IFD
// loads image to convert to TIFF
stream = new FileSeekableStream(fileName);
img = JAI.create("stream", stream);
// adds a tag
TIFFField aTiffField = new TIFFField(269,2,1,(Object) new String[] {documentName});
TIFFField offsetOfPrivateIfd = new TIFFField(35000,4,1,(Object) (Object) new long[] {(long)????????????}); // WHAT HERE ?
TIFFField[] arrayTF = {aTiffField};
tmpEncodeParam.setExtraFields(arrayTF);
// BELOW IS WHAT I WOULD LIKE TO HAVE IN A PRIVATE IFD
// defines a tag in the private IFD
tagsPriv.add(new TIFFField(0xC352,TIFFField.TIFF_SHORT,1,(Object) new char[] {(char)typeImage}));
TIFFField[] tabTagsPriv = new TIFFField[tagsPriv.size()];
tagsPriv.copyInto(tabTagsPriv);
TIFFEncodeParam privateEncodeParam=new TIFFEncodeParam();
privateEncodeParam.setExtraFields(tabTagsPriv);
Object[] montab = new Object[2];
montab[0] = ?????; // WHAT TO PUT HERE AS AN IMAGE ?
montab[1] = privateEncodeParam;
extraImgList.add(montab);
// adds an IFD
encodeParam.setExtraImages(extraImgList.iterator());
// CREATION OF TIFF
pb.addSource(img);
pb.add(tiffFile.getAbsolutePath());
pb.add("TIFF" );
pb.add(encodeParam);
JAI.create("filestore",pb);
stream.close();
System.gc();
} catch(Exception e){
System.out.println(e);
}
}
}