Aller au contenu

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


Cuillère

Recommended Posts

Posté(e)

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.

Archivé

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

×
×
  • Créer...