Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调整从库中拾取的图像的大小_Android_Image_Resize - Fatal编程技术网

Android 调整从库中拾取的图像的大小

Android 调整从库中拾取的图像的大小,android,image,resize,Android,Image,Resize,我在一个应用程序中工作,它从图库中获取图像并将其保存到解析中 问题是,当我拾取相机拍摄的图像时,图像的大小太大,需要几秒钟才能将图像加载到图像视图中。另外,当我保存图像并在应用程序中再次下载时,需要花费大量时间,因为它必须下载大图像 我不知道如何缩小所拾取图像的大小。我试过几种方法,但都奏效了 这是我现在的代码 public class Datos extends Activity implements OnItemSelectedListener { private final int S

我在一个应用程序中工作,它从图库中获取图像并将其保存到解析中

问题是,当我拾取相机拍摄的图像时,图像的大小太大,需要几秒钟才能将图像加载到图像视图中。另外,当我保存图像并在应用程序中再次下载时,需要花费大量时间,因为它必须下载大图像

我不知道如何缩小所拾取图像的大小。我试过几种方法,但都奏效了

这是我现在的代码

public class Datos extends Activity implements OnItemSelectedListener {


private final int SELECT_PHOTO = 1;
private ImageButton imageView;


ParseFile file;
byte [] data;

/*
    public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
    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);
    bm.recycle();
    return resizedBitmap;
    }
*/


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_datos);
    btnClick();

    imageView = (ImageButton) findViewById(R.id.imageButton);


    ImageButton pickImage = (ImageButton) findViewById(R.id.imageButton);
    pickImage.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
            photoPickerIntent.setType("image/*");
            //photoPickerIntent.putExtra("outputX", 150);
            //photoPickerIntent.putExtra("outputY", 100);
            //photoPickerIntent.putExtra("aspectX", 1);
            //photoPickerIntent.putExtra("aspectY", 1);
            //photoPickerIntent.putExtra("scale", true);
            startActivityForResult(photoPickerIntent, SELECT_PHOTO);
        }
    });

}

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


    switch (requestCode) {
        case SELECT_PHOTO:
            if (resultCode == RESULT_OK) {
                try {
                    Uri imageUri = imageReturnedIntent.getData();
                    InputStream imageStream = getContentResolver().openInputStream(imageUri);
                    Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                    imageView.setImageBitmap(selectedImage);

                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    selectedImage.compress(Bitmap.CompressFormat.PNG, 100, stream);

                    data = stream.toByteArray();

                    BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), selectedImage);
                    imageView.setBackgroundDrawable(bitmapDrawable);

                    BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
                    Bitmap bmp = drawable.getBitmap();
                    Bitmap b = Bitmap.createScaledBitmap(bmp, 120, 120, false);


                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }


            }

    }
}



@Override
public void onItemSelected(AdapterView<?> parent, View v, int position,
                           long id) {
    // TODO Auto-generated method stub

    Spinner spinner = (Spinner) parent;
    if (spinner.getId() == R.id.telefono) {
        consola = parent.getItemAtPosition(position).toString();
    } else if (spinner.getId() == R.id.provincia) {
        provincia = parent.getItemAtPosition(position).toString();
    }

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
}


public void btnClick() {

    Button buttonEnviar = (Button) findViewById(R.id.enviar);


    buttonEnviar.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View arg0) {

            //Storing image in parse passed in  onclick method of a button with the below code:


            Intent intentDatos = new Intent(Datos.this, Inicio.class);
            startActivity(intentDatos);


            ParseObject testObject = new ParseObject("Musica");

            if (data != null) {

                file = new ParseFile("selected.png", data);
            }

            else {

                data = "".getBytes();
                file = new ParseFile("selected.png", data);
            }

            //file.saveInBackground();


            testObject.put("imagen", file);

            testObject.saveInBackground();




        }
    });


}
公共类Datos扩展活动实现MSelectedListener{
私人最终int SELECT_PHOTO=1;
私有图像按钮图像视图;
解析文件;
字节[]数据;
/*
公共位图getResizedBitmap(位图bm、int-newWidth、int-newHeight){
int width=bm.getWidth();
int height=bm.getHeight();
浮动比例宽度=((浮动)新宽度)/宽度;
浮动刻度高度=((浮动)新高度)/高度;
//为操纵创建一个矩阵
矩阵=新矩阵();
//调整位图的大小
矩阵。后标度(标度宽度、标度高度);
//“重新创建”新位图
Bitmap resizedBitmap=位图.createBitmap(
bm,0,0,宽度,高度,矩阵,假);
bm.recycle();
返回resizedBitmap;
}
*/
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.activity_datos);
btnClick();
imageView=(ImageButton)findViewById(R.id.ImageButton);
ImageButton pickImage=(ImageButton)findViewById(R.id.ImageButton);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
意向照片采集器内容=新意向(意向.行动\u采集器);
photopickerinent.setType(“image/*”);
//PhotoPickerinent.putExtra(“输出”,150);
//光采集器。putExtra(“输出”,100);
//photopickerinent.putExtra(“aspectX”,1);
//PhotoPickerinent.putExtra(“aspectY”,1);
//感光材料。putExtra(“刻度”,真);
startActivityForResult(照片采集器内容,选择照片);
}
});
}
@凌驾
ActivityResult上受保护的void(int-requestCode、int-resultCode、Intent-ImageReturnedContent){
super.onActivityResult(请求代码、结果代码、图像返回内容);
开关(请求代码){
案例选择图片:
if(resultCode==RESULT\u OK){
试一试{
Uri imageUri=imageReturnedIntent.getData();
InputStream imageStream=getContentResolver().openInputStream(imageUri);
位图selectedImage=BitmapFactory.decodeStream(图像流);
设置图像位图(选择图像);
ByteArrayOutputStream=新建ByteArrayOutputStream();
选择edimage.compress(Bitmap.CompressFormat.PNG,100,流);
data=stream.toByteArray();
BitmapDrawable BitmapDrawable=新的BitmapDrawable(getResources(),selectedImage);
imageView.setBackgroundDrawable(位图可绘制);
BitmapDrawable drawable=(BitmapDrawable)imageView.getDrawable();
位图bmp=drawable.getBitmap();
位图b=位图.createScaledBitmap(bmp,120,120,false);
}catch(filenotfounde异常){
e、 printStackTrace();
}
}
}
}
@凌驾
已选择公共位置(AdapterView父视图、视图v、内部位置、,
长id){
//TODO自动生成的方法存根
微调器微调器=(微调器)父对象;
if(spinner.getId()==R.id.telefono){
consola=parent.getItemAtPosition(position.toString();
}else if(spinner.getId()==R.id.provincia){
provincia=parent.getItemAtPosition(position.toString();
}
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
公共无效btnClick(){
Button ButtonViar=(按钮)findViewById(R.id.enviar);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//在按钮的onclick方法中传递的parse中存储图像,代码如下:
Intent intentDatos=新的Intent(Datos.this,Inicio.class);
星触觉(意念);
ParseObject testObject=新的ParseObject(“Musica”);
如果(数据!=null){
文件=新的解析文件(“selected.png”,数据);
}
否则{
data=“.getBytes()”;
文件=新的解析文件(“selected.png”,数据);
}
//saveInBackground()文件;
testObject.put(“imagen”,文件);
testObject.saveInBackground();
}
});
}
有人知道怎么做吗

谢谢你的帮助,

会帮助你的

如果您希望位图比例相同并减小位图大小,请传递 最大位图大小。您可以使用此功能

public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
        int width = image.getWidth();
        int height = image.getHeight();

        float bitmapRatio = (float)width / (float) height;
        if (bitmapRatio > 1) {
            width = maxSize;
            height = (int) (width / bitmapRatio);
        } else {
            height = maxSize;
            width = (int) (height * bitmapRatio);
        }
        return Bitmap.createScaledBitmap(image, width, height, true);
}
选择照片
案例中更改您的
活动结果

   case SELECT_PHOTO:
        if (resultCode == RESULT_OK) {
            try {
                Uri imageUri = imageReturnedIntent.getData();
                InputStream imageStream = getContentResolver().openInputStream(imageUri);
                Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);

                selectedImage = getResizedBitmap(selectedImage, 400);// 400 is for example, replace with desired size

                imageView.setImageBitmap(selectedImage);


            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

可能是Hi Rahul的副本,谢谢你的回答,但问题是我不知道在哪里使用这部分代码。我一直在尝试,但没有成功。“getResizeBitmap”显示的消息从未使用过。您能帮我一下吗?或者给我发送一个关于如何使用此代码的示例吗?我已经查找了。太好了!在BitmapFactory.decodeFile()失败时可以完美地工作