Example usage for android.graphics Bitmap copy

List of usage examples for android.graphics Bitmap copy

Introduction

In this page you can find the example usage for android.graphics Bitmap copy.

Prototype

public Bitmap copy(Config config, boolean isMutable) 

Source Link

Document

Tries to make a new bitmap based on the dimensions of this bitmap, setting the new bitmap's config to the one specified, and then copying this bitmap's pixels into the new bitmap.

Usage

From source file:Main.java

/**
 * Apply a blur to a Bitmap//  w  w w  .  ja  v a2 s  .  c o m
 *
 * @param context    Application context
 * @param sentBitmap Bitmap to be converted
 * @param radius     Desired Radius, 0 < r < 25
 * @return a copy of the image with a blur
 */
@SuppressLint("InlinedApi")
public static Bitmap blur(Context context, Bitmap sentBitmap, int radius) {

    if (radius < 0) {
        radius = 0;
        if (DEBUG) {

        }
    } else if (radius > 25) {
        radius = 25;
        if (DEBUG) {

        }
    }

    if (Build.VERSION.SDK_INT > 16) {
        Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);

        final RenderScript rs = RenderScript.create(context);
        final Allocation input = Allocation.createFromBitmap(rs, sentBitmap,
                Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT);
        final Allocation output = Allocation.createTyped(rs, input.getType());
        final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        script.setRadius(radius /* e.g. 3.f */);
        script.setInput(input);
        script.forEach(output);
        output.copyTo(bitmap);
        return bitmap;
    }

    // Stack Blur v1.0 from
    // http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html
    //
    // Java Author: Mario Klingemann <mario at quasimondo.com>
    // http://incubator.quasimondo.com
    // created Feburary 29, 2004
    // Android port : Yahel Bouaziz <yahel at kayenko.com>
    // http://www.kayenko.com
    // ported april 5th, 2012

    // This is a compromise between Gaussian Blur and Box blur
    // It creates much better looking blurs than Box Blur, but is
    // 7x faster than my Gaussian Blur implementation.
    //
    // I called it Stack Blur because this describes best how this
    // filter works internally: it creates a kind of moving stack
    // of colors whilst scanning through the image. Thereby it
    // just has to add one new block of color to the right side
    // of the stack and remove the leftmost color. The remaining
    // colors on the topmost layer of the stack are either added on
    // or reduced by one, depending on if they are on the right or
    // on the left side of the stack.
    //
    // If you are using this algorithm in your code please add
    // the following line:
    //
    // Stack Blur Algorithm by Mario Klingemann <mario@quasimondo.com>

    Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);

    if (radius < 1) {
        return (null);
    }

    int w = bitmap.getWidth();
    int h = bitmap.getHeight();

    int[] pix = new int[w * h];
    Log.e("pix", w + " " + h + " " + pix.length);
    bitmap.getPixels(pix, 0, w, 0, 0, w, h);

    int wm = w - 1;
    int hm = h - 1;
    int wh = w * h;
    int div = radius + radius + 1;

    int r[] = new int[wh];
    int g[] = new int[wh];
    int b[] = new int[wh];
    int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
    int vmin[] = new int[Math.max(w, h)];

    int divsum = (div + 1) >> 1;
    divsum *= divsum;
    int dv[] = new int[256 * divsum];
    for (i = 0; i < 256 * divsum; i++) {
        dv[i] = (i / divsum);
    }

    yw = yi = 0;

    int[][] stack = new int[div][3];
    int stackpointer;
    int stackstart;
    int[] sir;
    int rbs;
    int r1 = radius + 1;
    int routsum, goutsum, boutsum;
    int rinsum, ginsum, binsum;

    for (y = 0; y < h; y++) {
        rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
        for (i = -radius; i <= radius; i++) {
            p = pix[yi + Math.min(wm, Math.max(i, 0))];
            sir = stack[i + radius];
            sir[0] = (p & 0xff0000) >> 16;
            sir[1] = (p & 0x00ff00) >> 8;
            sir[2] = (p & 0x0000ff);
            rbs = r1 - Math.abs(i);
            rsum += sir[0] * rbs;
            gsum += sir[1] * rbs;
            bsum += sir[2] * rbs;
            if (i > 0) {
                rinsum += sir[0];
                ginsum += sir[1];
                binsum += sir[2];
            } else {
                routsum += sir[0];
                goutsum += sir[1];
                boutsum += sir[2];
            }
        }
        stackpointer = radius;

        for (x = 0; x < w; x++) {

            r[yi] = dv[rsum];
            g[yi] = dv[gsum];
            b[yi] = dv[bsum];

            rsum -= routsum;
            gsum -= goutsum;
            bsum -= boutsum;

            stackstart = stackpointer - radius + div;
            sir = stack[stackstart % div];

            routsum -= sir[0];
            goutsum -= sir[1];
            boutsum -= sir[2];

            if (y == 0) {
                vmin[x] = Math.min(x + radius + 1, wm);
            }
            p = pix[yw + vmin[x]];

            sir[0] = (p & 0xff0000) >> 16;
            sir[1] = (p & 0x00ff00) >> 8;
            sir[2] = (p & 0x0000ff);

            rinsum += sir[0];
            ginsum += sir[1];
            binsum += sir[2];

            rsum += rinsum;
            gsum += ginsum;
            bsum += binsum;

            stackpointer = (stackpointer + 1) % div;
            sir = stack[(stackpointer) % div];

            routsum += sir[0];
            goutsum += sir[1];
            boutsum += sir[2];

            rinsum -= sir[0];
            ginsum -= sir[1];
            binsum -= sir[2];

            yi++;
        }
        yw += w;
    }
    for (x = 0; x < w; x++) {
        rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
        yp = -radius * w;
        for (i = -radius; i <= radius; i++) {
            yi = Math.max(0, yp) + x;

            sir = stack[i + radius];

            sir[0] = r[yi];
            sir[1] = g[yi];
            sir[2] = b[yi];

            rbs = r1 - Math.abs(i);

            rsum += r[yi] * rbs;
            gsum += g[yi] * rbs;
            bsum += b[yi] * rbs;

            if (i > 0) {
                rinsum += sir[0];
                ginsum += sir[1];
                binsum += sir[2];
            } else {
                routsum += sir[0];
                goutsum += sir[1];
                boutsum += sir[2];
            }

            if (i < hm) {
                yp += w;
            }
        }
        yi = x;
        stackpointer = radius;
        for (y = 0; y < h; y++) {
            // Preserve alpha channel: ( 0xff000000 & pix[yi] )
            pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum];

            rsum -= routsum;
            gsum -= goutsum;
            bsum -= boutsum;

            stackstart = stackpointer - radius + div;
            sir = stack[stackstart % div];

            routsum -= sir[0];
            goutsum -= sir[1];
            boutsum -= sir[2];

            if (x == 0) {
                vmin[y] = Math.min(y + r1, hm) * w;
            }
            p = x + vmin[y];

            sir[0] = r[p];
            sir[1] = g[p];
            sir[2] = b[p];

            rinsum += sir[0];
            ginsum += sir[1];
            binsum += sir[2];

            rsum += rinsum;
            gsum += ginsum;
            bsum += binsum;

            stackpointer = (stackpointer + 1) % div;
            sir = stack[stackpointer];

            routsum += sir[0];
            goutsum += sir[1];
            boutsum += sir[2];

            rinsum -= sir[0];
            ginsum -= sir[1];
            binsum -= sir[2];

            yi += w;
        }
    }

    Log.e("pix", w + " " + h + " " + pix.length);
    bitmap.setPixels(pix, 0, w, 0, 0, w, h);
    return (bitmap);
}

From source file:Main.java

/**
 * Create bitmap with blur effect. Use support render script.
 *
 * @param context//from  w  ww.  ja  v a 2s.  c o  m
 *            application context
 * @param bitmap
 *            PNG bitmap to convert
 * @param radius
 *            the radius of the blur. Supported range 0 < radius <= 25
 * @return bitmap that has been added blur effect
 */
private static Bitmap addBlurEffect(Context context, Bitmap bitmap, int radius) {
    if ((radius < 0) || (radius > 25)) {
        throw new IllegalArgumentException("Blur radius must be in range [0,25]");
    }

    if (null == bitmap) {
        return null;
    }

    /**
     * Support render script library has bug with blur effect on down
     * versions than <code>Build.VERSION_CODES.JELLY_BEAN</code>. To fix
     * this bug need convert bitmap format to
     * <code>Bitmap.Config.ARGB_8888</code>.
     */
    if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        bitmap = convertBitmapFormatToARGB888(bitmap);
    }

    Bitmap blurBitmap = bitmap.copy(bitmap.getConfig(), true);

    final RenderScript rs = RenderScript.create(context);
    final Allocation input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE,
            Allocation.USAGE_SCRIPT);
    final Allocation output = Allocation.createTyped(rs, input.getType());
    final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    script.setRadius(radius);
    script.setInput(input);
    script.forEach(output);
    output.copyTo(blurBitmap);

    return blurBitmap;
}

From source file:Main.java

static public void setImageColor(ImageView view, Bitmap sourceBitmap, int rgbcolor)// ,Bitmap sourceBitmap)
{
    if (sourceBitmap != null) {
        float R = Color.red(rgbcolor);
        float G = Color.green(rgbcolor);
        float B = Color.blue(rgbcolor);

        Log.v("R:G:B", R + ":" + G + ":" + B); //

        float[] colorTransform = { R / 255f, 0, 0, 0, 0, // R color
                0, G / 255f, 0, 0, 0 // G color
                , 0, 0, B / 255f, 0, 0 // B color
                , 0, 0, 0, 1f, 0f };/*from   w w  w  . jav  a 2s.c o m*/

        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.setSaturation(0f); // Remove Colour

        colorMatrix.set(colorTransform);
        ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
        Paint paint = new Paint();
        paint.setColorFilter(colorFilter);

        Bitmap mutableBitmap = sourceBitmap.copy(Bitmap.Config.ARGB_8888, true);
        view.setImageBitmap(mutableBitmap);
        Canvas canvas = new Canvas(mutableBitmap);
        canvas.drawBitmap(mutableBitmap, 0, 0, paint);

    }
}

From source file:com.c4mprod.utils.ImageManager.java

public static Bitmap quickCachedImage(String url) {
    if (instance != null && url != null) {
        Bitmap cachedBitmap = instance.mImageLiveCache.get(url);
        if (cachedBitmap != null && !cachedBitmap.isRecycled()) {
            return cachedBitmap.copy(Config.ARGB_8888, false);
        }//  w w  w  .  j a va  2s . com
    }
    return null;
}

From source file:Main.java

/**
 * Adjust the photo orientation//www .j  a  v  a2  s .c o  m
 * @param pathToFile
 * @return
 */
public static Bitmap adjustPhotoOrientation(String pathToFile) {
    try {
        Bitmap bitmap = BitmapFactory.decodeFile(pathToFile);
        ExifInterface exif = new ExifInterface(pathToFile);
        int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_NORMAL);
        int rotate = 0;

        switch (exifOrientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            rotate = 90;
            break;

        case ExifInterface.ORIENTATION_ROTATE_180:
            rotate = 180;
            break;

        case ExifInterface.ORIENTATION_ROTATE_270:
            rotate = 270;
            break;
        }
        if (rotate != 0) {
            int w = bitmap.getWidth();
            int h = bitmap.getHeight();

            // Setting pre rotate
            Matrix mtx = new Matrix();
            mtx.preRotate(rotate);

            // Rotating Bitmap & convert to ARGB_8888, required by tess
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
            bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
            return bitmap;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

From source file:com.cls.sugutomo.map.ClusterOP.java

@Override
public ClusterOptions getClusterOptions(List<Marker> markers) {
    int markersCount = markers.size();
    BitmapDescriptor cachedIcon = cache.get(markersCount);
    if (cachedIcon != null) {
        return clusterOptions.icon(cachedIcon);
    }/*from  ww  w.ja v a 2s.  co  m*/
    Bitmap base = null;
    int i = 0;
    do {
        base = baseBitmaps[i];
    } while (markersCount >= forCounts[i++]);
    Bitmap bitmap = base.copy(Config.ARGB_8888, true);
    String text = String.valueOf(markersCount);
    paint.getTextBounds(text, 0, text.length(), bounds);
    float x = bitmap.getWidth() / 2.0f;
    float y = (bitmap.getHeight() - bounds.height()) / 2.0f - bounds.top;
    Canvas canvas = new Canvas(bitmap);
    canvas.drawText(text, x, y, paint);
    BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);
    cache.put(markersCount, icon);
    return clusterOptions.icon(icon);
}

From source file:es.ondroid.mapclustering.MyClusterOptionsProvider.java

@Override
public ClusterOptions getClusterOptions(List<Marker> markers) {

    int markersCount = markers.size();
    BitmapDescriptor cachedIcon = cache.get(markersCount);
    if (cachedIcon != null) {
        return clusterOptions.icon(cachedIcon);
    }//from w ww.  ja  v a2 s .  c  om

    Bitmap base;
    int i = 0;
    do {
        base = baseBitmaps[i];
    } while (markersCount >= forCounts[i++]);

    Bitmap bitmap = base.copy(Bitmap.Config.ARGB_8888, true);

    String text = String.valueOf(markersCount);
    paint.getTextBounds(text, 0, text.length(), bounds);
    float x = bitmap.getWidth() / 2.0f;
    float y = (bitmap.getHeight() - bounds.height()) / 2.0f - bounds.top;

    Canvas canvas = new Canvas(bitmap);
    canvas.drawText(text, x, y, paint);

    BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);
    cache.put(markersCount, icon);

    return clusterOptions.icon(icon);
}

From source file:com.openvehicles.OVMS.ui.utils.DemoClusterOptionsProvider.java

@Override
public ClusterOptions getClusterOptions(List<Marker> markers) {

    int markersCount = markers.size();
    BitmapDescriptor cachedIcon = cache.get(markersCount);
    if (cachedIcon != null) {
        return clusterOptions.icon(cachedIcon);
    }/*from  w  ww .  j  a v a2 s.c  om*/

    Bitmap base;
    int i = 0;
    do {
        base = baseBitmaps[i];
    } while (markersCount >= forCounts[i++]);

    Bitmap bitmap = base.copy(Config.ARGB_8888, true);

    String text = String.valueOf(markersCount);
    paint.getTextBounds(text, 0, text.length(), bounds);
    float x = bitmap.getWidth() / 2.0f;
    float y = (bitmap.getHeight() - bounds.height()) / 2.0f - bounds.top;

    Canvas canvas = new Canvas(bitmap);
    canvas.drawText(text, x, y, paint);

    BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);
    cache.put(markersCount, icon);

    return clusterOptions.icon(icon);
}

From source file:com.openatk.rockapp.MyClusterOptionsProvider.java

@Override
public ClusterOptions getClusterOptions(List<Marker> markers) {
    int markersCount = markers.size();
    BitmapDescriptor cachedIcon = cache.get(markersCount);
    if (cachedIcon != null) {
        return clusterOptions.icon(cachedIcon);
    }/*w  w w .j a va2 s  .c  o m*/

    Bitmap base;
    int i = 0;
    do {
        base = baseBitmaps[i];
    } while (markersCount >= forCounts[i++]);

    Bitmap bitmap = base.copy(Config.ARGB_8888, true);

    String text = String.valueOf(markersCount);
    paint.getTextBounds(text, 0, text.length(), bounds);
    //float x = bitmap.getWidth() / 2.0f;
    //float y = (bitmap.getHeight() - bounds.height()) / 2.0f - bounds.top;
    float x = bitmap.getWidth() - (bitmap.getWidth() * 0.12f) - (bounds.width() / 2.0f);
    float y = -1.0f * bounds.top + (bitmap.getHeight() * 0.03f);

    Canvas canvas = new Canvas(bitmap);
    canvas.drawText(text, x, y, paint);

    BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);
    cache.put(markersCount, icon);

    return clusterOptions.icon(icon);
}

From source file:com.hereastory.ui.MarkerClusteringOptionsProvider.java

@Override
public ClusterOptions getClusterOptions(List<Marker> markers) {

    int markersCount = markers.size();
    BitmapDescriptor cachedIcon = cache.get(markersCount);
    if (cachedIcon != null) {
        return clusterOptions.icon(cachedIcon);
    }//  w  ww . jav a 2 s .co  m

    Bitmap base;
    int i = 0;
    do {
        base = baseBitmaps[i];
    } while (markersCount >= forCounts[i++]);

    Bitmap bitmap = base.copy(Config.ARGB_8888, true);

    String text = String.valueOf(markersCount);
    paint.getTextBounds(text, 0, text.length(), bounds);
    paint.setTextSize(40);
    float x = bitmap.getWidth() / 2.0f;
    float y = (bitmap.getHeight() - bounds.height()) / 2.0f - bounds.top;

    Canvas canvas = new Canvas(bitmap);
    canvas.drawText(text, x, y, paint);

    BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(bitmap);
    cache.put(markersCount, icon);

    return clusterOptions.icon(icon);
}