【问题标题】:Converting an image from drawable to byte array in Android在Android中将图像从drawable转换为字节数组
【发布时间】:2015-05-19 10:24:43
【问题描述】:

由于我将图像发送到 Parse.com,因此我必须将其转换为字节数组。我的第一种方法是从图库中选择图像并将其转换为字节数组,如下所示:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
             mMediaUri = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getContentResolver().query(mMediaUri,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            picturePath = cursor.getString(columnIndex);
            cursor.close();

           // ImageView imageView = (ImageView) findViewById(R.id.imgView);
            propertyImage.setImageBitmap(BitmapFactory.decodeFile(picturePath));

            Bitmap bmp = BitmapFactory.decodeFile(picturePath);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byteArray = stream.toByteArray();

        }

上述代码工作正常,图像已成功存储以供解析。现在,当我没有选择图像时,应用程序崩溃了。显然 bcoz,没有发送数据并引发解析异常。

现在,我想设置一个默认图像,即在我的可绘制文件夹中进行解析,以防 - 没有从图库中选择图像,这样解析操作就不会受到空数据的干扰。

我的方法是在开始时设置默认图像:

propertyImage=(ImageView)findViewById(R.id.imageViewOfImage);
        propertyImage.setImageResource(R.drawable.blank_image);

现在,我将如何将此默认图像转换为 ByteArray,以便将其发送到解析?

感谢和问候

【问题讨论】:

  • 首先需要将图片转换为Bitmap,然后再转换为byte数组。
  • 能用代码解释一下吗?
  • 您是如何从图库中挑选图片的?

标签: android image parse-platform bytearray


【解决方案1】:

检查我的工作代码:

首先您需要使用此方法将您的drawable 图像转换为Bitmap

 public static Bitmap drawableToBitmap(Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable) drawable).getBitmap();
    }

    final int width = !drawable.getBounds().isEmpty() ? drawable
            .getBounds().width() : drawable.getIntrinsicWidth();

    final int height = !drawable.getBounds().isEmpty() ? drawable
            .getBounds().height() : drawable.getIntrinsicHeight();

    final Bitmap bitmap = Bitmap.createBitmap(width <= 0 ? 1 : width,
            height <= 0 ? 1 : height, Bitmap.Config.ARGB_8888);

    Log.v("Bitmap width - Height :", width + " : " + height);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

获取位图对象后,您需要使用将其转换为byte 数组。

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

【讨论】:

  • 在哪里设置drawable的Resource Id?
  • 首先使用Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);获取你的drawable,然后在Bitmap bitmap = drawableToBitmap(drawable);这样的方法中传递给它
【解决方案2】:

它会帮助你转换drawable --> ByteArray....

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bitmapdata = stream.toByteArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2013-05-19
    相关资源
    最近更新 更多