Mega Code Archive

 
Categories / Android / 2D Graphics
 

Create a transparent bitmap from an existing bitmap by replacing certain color with transparent

//package org.dyndns.warenix.util; import android.graphics.Bitmap; import android.graphics.Color; class Main{   /**    * create a transparent bitmap from an existing bitmap by replacing certain    * color with transparent    *     * @param bitmap    *            the original bitmap with a color you want to replace    * @return a replaced color immutable bitmap    */   public static Bitmap createTransparentBitmapFromBitmap(Bitmap bitmap,       int replaceThisColor) {     if (bitmap != null) {       int picw = bitmap.getWidth();       int pich = bitmap.getHeight();       int[] pix = new int[picw * pich];       bitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);       for (int y = 0; y < pich; y++) {         // from left to right         for (int x = 0; x < picw; x++) {           int index = y * picw + x;           int r = (pix[index] >> 16) & 0xff;           int g = (pix[index] >> 8) & 0xff;           int b = pix[index] & 0xff;           if (pix[index] == replaceThisColor) {             pix[index] = Color.TRANSPARENT;           } else {             break;           }         }         // from right to left         for (int x = picw - 1; x >= 0; x--) {           int index = y * picw + x;           int r = (pix[index] >> 16) & 0xff;           int g = (pix[index] >> 8) & 0xff;           int b = pix[index] & 0xff;           if (pix[index] == replaceThisColor) {             pix[index] = Color.TRANSPARENT;           } else {             break;           }         }       }       Bitmap bm = Bitmap.createBitmap(pix, picw, pich,           Bitmap.Config.ARGB_4444);       return bm;     }     return null;   } } InputStream Utils /*     Copyright 2010 Cesar Valiente Gordo      This file is part of QuiteSleep.     QuiteSleep is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by     the Free Software Foundation, either version 3 of the License, or     (at your option) any later version.     QuiteSleep is distributed in the hope that it will be useful,     but WITHOUT ANY WARRANTY; without even the implied warranty of     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     GNU General Public License for more details.     You should have received a copy of the GNU General Public License     along with QuiteSleep.  If not, see <http://www.gnu.org/licenses/>. */ package es.cesar.quitesleep.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; /**  *   * @author Cesar Valiente Gordo  * @mail cesar.valiente@gmail.com  *  */ public class InputStreamUtils {         final static int BUFFER_SIZE = 4096;    // Tama??e los bloques a leer/escribir al comprimir en ZIP      /**************************************************************************    *     * @param in InputStream    * @return String    * @throws Exception    *     * This function converts an InputStream to a String    **************************************************************************/      public static String InputStreamTOString (InputStream in) throws Exception {          ByteArrayOutputStream outStream = new ByteArrayOutputStream();        byte[] data = new byte[BUFFER_SIZE];        int count = -1;  // Bytes leidos por bloque        while ( (count = in.read(data,0,BUFFER_SIZE)) != -1 )          outStream.write(data,0,count);                data=null;                       return new String (outStream.toByteArray(),"ISO-8859-1");        }      /**    * This function converts an InputStream in a predefined encoding to a String.    *     * @param in    * @param encoding    * @return    * @throws Exception    */   public static String InputStreamTOString (InputStream in, String encoding) throws Exception {          ByteArrayOutputStream outStream = new ByteArrayOutputStream();        byte[] data = new byte[BUFFER_SIZE];        int count = -1;  // Bytes leidos por bloque        while ( (count = in.read(data,0,BUFFER_SIZE)) != -1 )          outStream.write(data,0,count);                data=null;                       return new String (outStream.toByteArray(),encoding);        }      /**************************************************************************    *     * @param in String    * @return InputStream    * @throws Exception    *     * This function converts a String to a InputStream    **************************************************************************/      public static InputStream StringTOInputStream (String in) throws Exception {          ByteArrayInputStream is = new ByteArrayInputStream(in.getBytes("ISO-8859-1"));          return is;   }         /**************************************************************************    *     * @param in InputStream    * @return byte[]    * @throws IOException    *     * This function converts an InputStream to a byte[]       **************************************************************************/      public static byte[] InputStreamTOByte (InputStream in) throws IOException {          ByteArrayOutputStream outStream = new ByteArrayOutputStream();        byte[] data = new byte[BUFFER_SIZE];        int count = -1;  // Bytes leidos por bloque        while ( (count = in.read(data,0,BUFFER_SIZE)) != -1 )          outStream.write(data,0,count);                data=null;                       return outStream.toByteArray();        }        /**    * This function converts a byte[] into a InputStream    *     * @param in    * @return    * @throws Exception    */   public static InputStream byteTOInputStream (byte[] in) throws Exception {          ByteArrayInputStream resultado = new ByteArrayInputStream(in);          return resultado;       }      /**    * This function converts byte[] into a String    *     * @param in    * @return    * @throws Exception    */   public static String byteToString (byte[] in) throws Exception {          InputStream ins = byteTOInputStream(in);     return InputStreamTOString(ins);   }          }