我想在捕获图像之后但在保存之前为图像指定大小。我想要搜索栏为图像指定大小,然后将图像压缩到该大小。因为我是 android 的新手所以请帮助!
我的代码是:
public class ImageActivity extends AppCompatActivity {
private static final int CAMERA_REQUEST = 1888;
private ImageView imageview;
SeekBar sb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);
sb=(SeekBar)findViewById(R.id.seekbar1);
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
int progressChangedValue=0;
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser)
{
progressChangedValue = progress;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
Toast.makeText(ImageActivity.this, "progress starts",
Toast.LENGTH_SHORT).show();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
Toast.makeText(ImageActivity.this, "Seek bar progress is :" + progressChangedValue,
Toast.LENGTH_SHORT).show();
}
});
this.imageview = (ImageView) this.findViewById(R.id.imageview1);
Button photoButton = (Button) this.findViewById(R.id.button1);
photoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
});
}
protected void onActivityResult(int requestcode, int resultcode, Intent data) {
if (requestcode == CAMERA_REQUEST && resultcode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
imageview.setImageBitmap(photo);
UUID uuid = UUID.randomUUID();
String randomUUIDString = uuid.toString();
Toast.makeText(getApplicationContext(),"UUID is"+randomUUIDString,Toast.LENGTH_LONG).show();
}
}
最佳答案
您必须设置最大进度:
seekBar.setMax(200);
// or with the imageview's size: 'seekBar.setMax(imageview.getWidth());'
// if 'getWidth()' returns 0, you need to get it in a thread (with 'post()')
现在,您可以初始化进度(例如,如果您不想开销 200):
seekBar.setProgress(seekBar.getMax());
然后,通过监听器中的 onProgressChange
状态,您可以设置新的宽度/高度。
假设您有一张宽度和高度相等、最大值为 200 的图像,您必须执行以下操作:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
imageview.getLayoutParams().width = progress;
imageview.getLayoutParams().height = progress;
imageview.requestLayout();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar seekBar) { }
});
就是这样!现在,您必须将更改后的尺寸保存在 Bitmap
上,您应该使用 ImageView 值创建一个新的 Bitmap,如下所示:
Bitmap finalBitmap = Bitmap.createScaledBitmap(bitmap,
imageview.getWidth(), imageview.getHeight(), false);
这不是最终的解决方案,它需要更多的测试和调整,但它是帮助您获得所需内容的有效线索。
关于android - 我希望我的代码在将图像保存到 android 之前使用搜索栏调整图像大小。我怎样才能做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38520188/