Question

Je suis en train de réduire un Bitmap qui contient la transparence. Malheureusement, les trois méthodes que j'ai essayé résultat en blanc où il devrait y avoir une transparence totale. Je voudrais maintenir la transparence.

Le bitmap que je suis mise à l'échelle est toujours carré, donc mes fonctions supposent que:

private static Bitmap scale1(int edge, final Bitmap res) {
    int factor = 
        edge == 0 ? Fixed32.ONE : Fixed32.div(res.getHeight(), edge);
    Bitmap scaled = PNGEncodedImage.encode(res).
                        scaleImage32(factor, factor).getBitmap();
    return scaled;
}

private static Bitmap scale2(int edge, final Bitmap res) {
    Bitmap val = new Bitmap(edge,edge);
    val.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
    res.scaleInto(val, Bitmap.FILTER_BILINEAR);
    return val;
}

private static Bitmap scale3(int edge, final Bitmap res) {
    Bitmap val = new Bitmap(edge,edge);
    val.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
    Graphics g = new Graphics(val);
    int[] pathX = new int[] {0, 0+edge, 0+edge, 0};
    int[] pathY = new int[] {0, 0, 0+edge, 0+edge};
    byte[] pathPointTypes = new byte[] {
        Graphics.CURVEDPATH_END_POINT,Graphics.CURVEDPATH_END_POINT,
        Graphics.CURVEDPATH_END_POINT,Graphics.CURVEDPATH_END_POINT};
    int factor = 
        edge == 0 ? Fixed32.ONE : Fixed32.div(res.getHeight(), edge);
    g.drawTexturedPath(pathX, pathY, pathPointTypes, null,
            0, 0, factor, Fixed32.toFP(0), Fixed32.toFP(0), factor, res);
    return val;
}
Était-ce utile?

La solution

Il ressemble à Graphics.drawBitmap (...) utilise Graphics.drawRGB (...) au lieu de Graphics.drawARGB (...)

La distinction est de savoir si le canal alpha ou non est utilisé pour dessiner l'image bitmap. Je l'ai essayé d'utiliser Graphics.drawARGB (...) directement pour un autre travail bitmap transparent que je l'ai fait, et qui a fait la différence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top