package org.itsnat.droid.impl.xmlinflater.drawable;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.NinePatch;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import org.itsnat.droid.ItsNatDroidException;
import org.itsnat.droid.impl.xmlinflater.BitmapUtil;
/**
* Created by jmarranz on 19/10/2016.
*/
public class BitmapDrawableUtil
{
public static Drawable createImageBasedDrawable(byte[] byteArray, int bitmapDensityReference, boolean expectedNinePatch, Resources res)
{
if (expectedNinePatch)
return createNinePatchDrawable(byteArray,bitmapDensityReference,res);
Bitmap bitmap = BitmapUtil.createBitmap(byteArray,bitmapDensityReference,res);
byte[] chunk = bitmap.getNinePatchChunk();
boolean result = NinePatch.isNinePatchChunk(chunk);
if (result)
{
// Raro pero resulta que es un NinePatch (raro porque lo normal es que se especifique la extensión .9.png)
return createNinePatchDrawable(bitmap,res);
}
else
{
return new BitmapDrawable(res, bitmap);
}
}
public static NinePatchDrawable createNinePatchDrawable(byte[] byteArray, int bitmapDensityReference, Resources res)
{
Bitmap bitmap = BitmapUtil.createBitmap(byteArray,bitmapDensityReference,res);
return createNinePatchDrawable(bitmap,res);
}
public static NinePatchDrawable createNinePatchDrawable(Bitmap bitmap,Resources res)
{
byte[] chunk = bitmap.getNinePatchChunk();
boolean result = NinePatch.isNinePatchChunk(chunk);
if (!result) throw new ItsNatDroidException("Expected a 9 patch png, put a valid 9 patch in /res/drawable folder, generate the .apk (/build/outputs/apk in Android Studio), decompress as a zip and copy the png file");
return new NinePatchDrawable(res, bitmap, chunk, new Rect(), "XML 9 patch");
}
}