欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android Bitmap常用代码片段,,获取方式 ```java

来源: javaer 分享于  点击 42679 次 点评:55

Android Bitmap常用代码片段,,获取方式 ```java


获取方式 ```java / 获取 drawable 的图片 可以循环 1.图名 2.drawable 3.包名 /

    int imgid = getResources().getIdentifier("ic_launcher", "drawable", "com.example.anywight");    text.setBackgroundResource(imgid);    /** 通过图片id获得Bitmap **/    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);    /** 通过 assest 获取 获得Drawable bitmap **/    InputStream in = this.getAssets().open("ic_launcher");    Drawable da = Drawable.createFromStream(in, null);    Bitmap mm = BitmapFactory.decodeStream(in);    /** 通过 sdcard 获得 bitmap **/    Bitmap bit = BitmapFactory.decodeFile("/sdcard/android.jpg");
 常用操作 ```java/** view转Bitmap **/    public static Bitmap convertViewToBitmap(View view, int bitmapWidth, int bitmapHeight) {        Bitmap bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);        view.draw(new Canvas(bitmap));        return bitmap;    }    /** 将控件转换为bitmap **/    public static Bitmap convertViewToBitMap(View view) {        // 打开图像缓存        view.setDrawingCacheEnabled(true);        // 必须调用measure和layout方法才能成功保存可视组件的截图到png图像文件        // 测量View大小        view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));        // 发送位置和尺寸到View及其所有的子View        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());        // 获得可视组件的截图        Bitmap bitmap = view.getDrawingCache();        return bitmap;    }    public static Bitmap getBitmapFromView(View view) {        Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(returnedBitmap);        Drawable bgDrawable = view.getBackground();        if (bgDrawable != null)            bgDrawable.draw(canvas);        else            canvas.drawColor(Color.WHITE);        view.draw(canvas);        return returnedBitmap;    }    /** 获取屏幕截图的bitmap对象的代码如下 **/    public Bitmap getScreenPic(View view) {        View rootView = view.getRootView();        rootView.setDrawingCacheEnabled(true);        rootView.buildDrawingCache();        // 不明白为什么这里返回一个空,有帖子说不能在oncreat方法中调用        // 测量View大小        rootView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));        // 发送位置和尺寸到View及其所有的子View        rootView.layout(0, 0, rootView.getMeasuredWidth(), rootView.getMeasuredHeight());        // 解决措施,调用上面的measure和layout方法之后,返回值就不再为空        // 如果想要创建的是固定长度和宽度的呢?        Bitmap bitmap = rootView.getDrawingCache();        rootView.destroyDrawingCache();        return bitmap;    }    /** Drawable → Bitmap **/    public static Bitmap drawableToBitmap(Drawable drawable) {        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),                drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);        Canvas canvas = new Canvas(bitmap);        // canvas.setBitmap(bitmap);        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());        drawable.draw(canvas);        return bitmap;    }    /** bitmap → drawable **/    public static Drawable bitmapToDrawable(Context context, String filename) {        Bitmap image = null;        BitmapDrawable ddd = null;        try {            AssetManager am = context.getAssets();            InputStream is = am.open(filename);            image = BitmapFactory.decodeStream(is);            ddd = new BitmapDrawable(context.getResources(), image);            is.close();        } catch (Exception e) {        }        return ddd;    }    /** byte[] → Bitmap **/    public static Bitmap byteToDrawable(Context context, byte[] bb) {        Bitmap pp = BitmapFactory.decodeByteArray(bb, 0, bb.length);        return pp;    }    /** Bitmap → byte[] **/    public static byte[] bitmapToByte(Bitmap bitmap) {        ByteArrayOutputStream baos = new ByteArrayOutputStream();        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);        byte[] yy = baos.toByteArray();        return yy;    }    /** 将text 转换成 bitmap **/    public static Bitmap createTxtImage(String txt, int txtSize) {        Bitmap mbmpTest = Bitmap.createBitmap(txt.length() * txtSize + 4, txtSize + 4, Config.ARGB_8888);        Canvas canvasTemp = new Canvas(mbmpTest);        Paint p = new Paint();        p.setAntiAlias(true);        p.setColor(Color.WHITE);        p.setTextSize(txtSize);        canvasTemp.drawText(txt, 2, txtSize - 2, p);        return mbmpTest;    }    /** 显示将bitmap进行缩放 **/    public Bitmap bitmapScanel(Context context) {        // 通过openRawResource获取一个inputStream对象        InputStream inputStream = context.getResources().openRawResource(R.id.backageground);        // 通过一个InputStream创建一个BitmapDrawable对象        BitmapDrawable drawable = new BitmapDrawable(inputStream);        // 通过BitmapDrawable对象获得Bitmap对象        Bitmap bitmap = drawable.getBitmap();        // 利用Bitmap对象创建缩略图        bitmap = ThumbnailUtils.extractThumbnail(bitmap, 40, 40);        return bitmap;    }    /** 放大缩小图片 **/    public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {        int width = bitmap.getWidth();        int height = bitmap.getHeight();        Matrix matrix = new Matrix();        float scaleWidht = ((float) w / width);        float scaleHeight = ((float) h / height);        matrix.postScale(scaleWidht, scaleHeight);        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);        return newbmp;    }    /** 获得圆角图片的方法 **/    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);        Canvas canvas = new Canvas(output);        final int color = 0xff424242;        final Paint paint = new Paint();        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());        final RectF rectF = new RectF(rect);        paint.setAntiAlias(true);        canvas.drawARGB(0, 0, 0, 0);        paint.setColor(color);        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));        canvas.drawBitmap(bitmap, rect, rect, paint);        return output;    }    /** 对 bitmap 进行裁剪 **/    public Bitmap bitmapClip(Context context, int id, int x, int y) {        Bitmap map = BitmapFactory.decodeResource(context.getResources(), id);        map = Bitmap.createBitmap(map, x, y, 120, 120);        return map;    }    /**     * 图片的倒影效果     */    public static Bitmap createReflectedImage(Bitmap originalImage) {        final int reflectionGap = 4;        int width = originalImage.getWidth();        int height = originalImage.getHeight();        Matrix matrix = new Matrix();        matrix.preScale(1, -1);        // Create a Bitmap with the flip matrix applied to it.        // We only want the bottom half of the image        Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false);        // Create a new bitmap with same width but taller to fit reflection        Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);        // Create a new Canvas with the bitmap that's big enough for        // the image plus gap plus reflection        Canvas canvas = new Canvas(bitmapWithReflection);        // Draw in the original image        canvas.drawBitmap(originalImage, 0, 0, null);        // Draw in the gap        Paint defaultPaint = new Paint();        canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);        // Draw in the reflection        canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);        // Create a shader that is a linear gradient that covers the reflection        Paint paint = new Paint();        LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff,                TileMode.CLAMP);        // Set the paint to use this shader (linear gradient)        paint.setShader(shader);        // Set the Transfer mode to be porter duff and destination in        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));        // Draw a rectangle using the paint with our linear gradient        canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint);        return bitmapWithReflection;    }
相关栏目:

用户点评