Frage

Ich versuche, ein Bitmap mit Transparenz zu verringern. Leider sind alle drei Methoden, die ich Ergebnis in weiß versucht haben, wo sollte es volle Transparenz sein. Ich möchte die Transparenz erhalten.

Die Bitmap I Skalierung bin immer quadratisch, so meine Funktionen setzen voraus, dass:

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;
}
War es hilfreich?

Lösung

Es sieht aus wie Graphics.drawBitmap (...) verwendet Graphics.drawRGB (...) statt Graphics.drawARGB (...)

Der Unterschied ist, ob der Alpha-Kanal verwendet wird, um die Bitmap zu zeichnen. Ich habe versucht, Graphics.drawARGB mit (...) direkt aus einer anderen transparenten Bitmap-Arbeit, die ich getan habe, und die den Unterschied gemacht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top