Aller au contenu

[PB] Sérialiser et désérialiser des bitmaps


Cuillère

Recommended Posts

Bonjour à tous, j'ai un problème pour sérialiser et désérialiser des bitmaps. Voilà le code :

	public static void serialiserBitmap(String path,String urlKey, Bitmap bmp) throws IOException{

		ByteBuffer dst = null;
		byte[] bytesar = null;
		FileOutputStream fichier = new FileOutputStream(path);
		ObjectOutputStream out = new ObjectOutputStream(fichier);
	    out.writeInt(bmp.getRowBytes());
	    out.writeInt(bmp.getHeight());
	    out.writeInt(bmp.getWidth());

	    int bmSize = bmp.getRowBytes() * bmp.getHeight();
	    if(dst==null || bmSize > dst.capacity())
	        dst= ByteBuffer.allocate(bmSize);

	    out.writeInt(dst.capacity());

	    dst.position(0);

	    bmp.copyPixelsToBuffer(dst);
	    if(bytesar==null || bmSize > bytesar.length)
	        bytesar=new byte[bmSize];

	    dst.position(0);
	    dst.get(bytesar);

	    out.writeObject(urlKey);
	    out.write(bytesar, 0, bytesar.length);

}

public static void deserialiserBitmap(String path) throws IOException, ClassNotFoundException{
	File parent = new File(path);
	for(File f : parent.listFiles()){
		if(f.getAbsolutePath().contains("images")){

		FileInputStream fichier = new FileInputStream(f);
		ObjectInputStream in = new ObjectInputStream(fichier);

		ByteBuffer dst = null;
		byte[] bytesar = null;

	    int nbRowBytes=in.readInt();
	    int height=in.readInt();
	    int width=in.readInt();

	    int bmSize=in.readInt();

	    String key = (String)in.readObject();

	    if(bytesar==null || bmSize > bytesar.length)
	        bytesar= new byte[bmSize];


	    int offset=0;

	    while(in.available()>0){
	        offset=offset + in.read(bytesar, offset, in.available());
	    }


	    if(dst==null || bmSize > dst.capacity())
	        dst= ByteBuffer.allocate(bmSize);
	    dst.position(0);
	    dst.put(bytesar);
	    dst.position(0);
	    Bitmap bmp =Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
	    bmp.copyPixelsFromBuffer(dst);

	    imagesEnCash.put(key, bmp);
	    in.close();
		}
	}


}

Mais je me retrouve avec des images complètement noires après la désérialisation. Si quelqu'un a une idée, merci !

EDIT : J'ai passé le tout au debugger et les tableau de bytes est uniquement rempli de 0.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...