尝试从可绘制图像调整大小?

费尔南多·派瓦(Fernando Paiva)

我正在尝试调整可绘制对象中包含的图像的大小。为此,我创建了一个接收带有路径图像的String的类。如果图像在存储中,则可以正常工作,但是如果drawable中包含的图像不起作用,则会引发异常:Unable to decode stream: java.io.FileNotFoundException路径图像为:android.resource://br.com.williarts.kontrole/2130837614

我该怎么办?

影像检视

<ImageView
                android:id="@+id/ivPerfil"
                android:padding="5dp"
                android:layout_width="120dp"
                android:layout_height="120dp"
                android:scaleType="fitXY"
                />

活动

ivPerfil = (ImageView)findViewById(R.id.ivPerfil);
//image
        Uri path = Uri.parse("android.resource://" + ivPerfil.getResources().getResourcePackageName(R.drawable.icon_usuario) + "/" + R.drawable.icon_usuario);
        fotoPerfil = path.toString();
        ivPerfil.setImageURI(path);

调整图像大小

public class ResizeFileImage {
    private File file, novaImagem;
    private Integer width, height;

    public ResizeFileImage(String pathFile, Integer w, Integer h){
        Log.i("PATH FILE->", pathFile);
        file = new File(pathFile);
        this.width = w;
        this.height = h;
    }

    public File getResizeFile(){
        Bitmap myBitmap = null;

        try{            
            if(file.getPath().contains("resource")){
                //from drawable
                myBitmap = BitmapFactory.decodeFile(file.getCanonicalPath());
            }else{
                //from storage
                myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
            }
        }catch(IOException e){
            e.printStackTrace();
        }


        Log.i("ORIGINAL WIDTH->", myBitmap.getWidth() + "");
        Log.i("ORIGINAL HEIGHT->", myBitmap.getHeight() + "");

        Bitmap bmp = getResizedBitmap(myBitmap, height, width);
        Log.i("CHANGE WIDTH->", bmp.getWidth() + "");
        Log.i("CHANGE HEIGHT->", bmp.getHeight() + "");

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 0, bos);
        byte[] bitmapdata = bos.toByteArray();

        String nomeImg = "teste.png";
        String seuDiretorio = Environment.getExternalStorageDirectory() + File.separator + "MyApp";

        try{
            File diretorio = new File(seuDiretorio);
            if(!diretorio.exists()){
                diretorio.mkdir();
            }
            File imgToSdcard = new File(seuDiretorio + File.separator + nomeImg);
            FileOutputStream outputStream = new FileOutputStream(imgToSdcard, false);
            outputStream.write(bitmapdata , 0, bitmapdata.length);
            outputStream.flush();
            outputStream.close();
        }catch (IOException e){
            Log.e("FileOutputStream Exception Error->", e.getLocalizedMessage());
        }
        novaImagem = new File(seuDiretorio + File.separator + nomeImg);
        return novaImagem;
    }

    /** redimensiona o tamanho da imagem */
    private Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // CREATE A MATRIX FOR THE MANIPULATION
        Matrix matrix = new Matrix();
        // RESIZE THE BIT MAP
        matrix.postScale(scaleWidth, scaleHeight);

        // "RECREATE" THE NEW BITMAP
        Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
        return resizedBitmap;
    }


    public void removeNovaImagem(){
        if(novaImagem != null && novaImagem.exists()){
            novaImagem.delete();
        }
    }
}

例外

02-13 17:42:35.967  27424-27424/br.com.williarts.kontrole E/BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: /android.resource:/br.com.williarts.kontrole/2130837614: open failed: ENOENT (No such file or directory)
Quanturium

您无法获取资源文件的路径,因为它们位于您的应用程序(.apk文件)中。如果要通过资源路径对资源文件执行操作,则可以将其复制到内存中。另一种解决方案是将资源加载到内存中。您可以通过以下方式获得位图:

Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

或Drawable具有:

Drawable d = getResources().getDrawable( R.drawable.icon );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调整可绘制图层列表中位图的大小无效

来自分类Dev

尝试获取可绘制图像时出现android.content.res.Resources $ NotFoundException

来自分类Dev

可绘制图像类型以最小化apk大小

来自分类Dev

在画布上绘制我的可绘制图像?

来自分类Dev

从Android中的可绘制图像创建图像实例

来自分类Dev

从android中的可绘制图像创建图像实例

来自分类Dev

如何在px图像上设计的Android上绘制适当大小的可绘制图形-了解尺寸,密度等?

来自分类Dev

在Fresco的SimpleDraweeView中加载可绘制图像资源

来自分类Dev

毕加索不加载可绘制图像(Android)

来自分类Dev

Android浮动按钮更改可绘制图像

来自分类Dev

Android可绘制图像未显示

来自分类Dev

标题为数字的参考可绘制图像

来自分类Dev

Android使用代码创建可绘制图像

来自分类Dev

使用可绘制图像作为背景

来自分类Dev

Android浮动按钮更改可绘制图像

来自分类Dev

可绘制图像不按屏幕密度缩放

来自分类Dev

ggplot:手动绘制图例,而不是自动调整图大小

来自分类Dev

波纹对可绘制图形的影响

来自分类Dev

如何使用滑行将图像下载到可绘制图像中?

来自分类Dev

无法将图像从可绘制图像发布到Facebook

来自分类Dev

从字节数组转换为可绘制图像会产生损坏的图像:Android

来自分类Dev

获取带有包装连续可绘制图像的图像视图位置

来自分类Dev

如何在Android中将图像从可绘制图像设置为ImageView

来自分类Dev

如何使用在线图像URL代替可绘制图像

来自分类Dev

在画布内绘制图像

来自分类Dev

在cameraOverlayView中绘制图像

来自分类Dev

IB_DESIGNABLE绘制图像

来自分类Dev

画布-从原型中绘制图像

来自分类Dev

画布未绘制图像

Related 相关文章

热门标签

归档