J'essaie de faire un filtre d'image simple dans android renderscript, et cela fonctionne pour les petites images. Cependant, je reçois out of memory error
pour une image aussi grande qu'une photo prise avec une caméra par exemple (tout fonctionne bien pour les petites images cependant). Je sais que mon code est un peu moche (la plupart du temps copié à partir here), de sorte que toute astuce sur la façon de faire le calcul de renderScript sur grand bitmap est apprécié .. Voici le code pour appeler rs:Allocation de gros bitmap pour rendererscript (android)
RenderScript rs = RenderScript.create(this);
Allocation allocIn = Allocation.createFromBitmap(rs, bmp);
Allocation allocOut = Allocation.createTyped(rs, allocIn.getType());
ScriptC_sample sc = new ScriptC_sample(rs, getResources(), R.raw.sample);
sc.set_in(allocIn);
sc.set_out(allocOut);
sc.forEach_root(allocIn, allocOut);
Bitmap bmpOut = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
allocOut.copyTo(bmpOut);
imgView.setImageBitmap(bmpOut);
Et voici ce que je crois pertinentes du fichier rendescript lui-même:
rs_allocation in;
void root(const uchar4* v_in, uchar4* v_out, const void* usrData,
uint32_t x, uint32_t y) {
float4 curPixel = rsUnpackColor8888(*v_in);
// ... computations
*v_out = rsPackColorTo8888(curPixel.r, curPixel.g, curPixel.b, curPixel.a);
}
Je ne comprends que je ne peux pas vraiment charger un gros bitmap à la mémoire (je peux charger le fichier dans imageView bien?), et je l'ai déjà utilisé pour gérer inJustDecodeBounds Mais ici, je n'ai aucune idée de comment et où l'utiliser, et je ne veux pas redimensionner l'image bitmap (je voudrais traiter le fichier original et sauver mo fichier difié de la même taille)
Merci, j'ai déjà compris 'BitmapRegionDecoder', heureux de vous confirmer. N'y a-t-il vraiment aucun moyen de sauvegarder le fichier sans utiliser de bibliothèques externes? – wasyl