Как изменить размер 2 изображений в android, так как одно изображение, которое остается постоянным (.png
изображение в папке с возможностью рисования), должно быть равно размеру входного изображения (изображение вводится от пользователя из мобильной галереи). Я использую функцию resize(src, dst)
в opencv для изменения размера двух изображений, не имею никакого представления об этой функции в конце java, поскольку я также проверяю this post, но она выглядит для меня какой-то дополнительной загруженной работой.Как изменить размер входного изображения
ответ
Я знаю некоторый метод об операции изображения в android.
Transform Drawable в растр
public static Bitmap drawableToBitmap(Drawable drawable) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, drawable
.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
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;
}
Вы можете превратить свой первый рисуем изображение в Bitmap, а затем изменить его размер со вторым способом. Используйте getWidth() и getHeight(), чтобы получить параметры изображения.
Я не знаю, является ли это лучшим решением. Если я не понял ваши намерения, сделайте комментарий, и я могу отредактировать свой ответ.
Edit:
Вы можете получить Uri или путь права изображения?
Если вы получаете Uri, используйте String path = uri.getPath();
, чтобы получить путь.
Тогда
Decode Bitmap из файла:
public static Bitmap getBitmap(String path) {
return BitmapFactory.decodeFile(String path);
}
Если размер изображения не слишком большой, загрузить его непосредственно не вызвать утечку памяти, все в порядке.
Но если вы не знаете размер, я рекомендую следующий метод.
Decode BitmapDrawable от пути:
public static BitmapDrawable getScaledDrawable(Activity a, String path) {
Display display = a.getWindowManager().getDefaultDisplay();
float destWidth = display.getWidth();
float destHeight = display.getHeight();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
float srcWidth = options.outWidth;
float srcHeight = options.outHeight;
int inSampleSize = 1;
if (srcHeight > destHeight || srcWidth > destWidth) {
if (srcWidth > srcHeight) {
inSampleSize = Math.round(srcHeight/destHeight);
} else {
inSampleSize = Math.round(srcWidth/destWidth);
}
}
options = new BitmapFactory.Options();
options.inSampleSize = inSampleSize;
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
return new BitmapDrawable(a.getResources(), bitmap);
}
Этот метод возвращает объект масштабируется BitmapDrawable, чтобы предотвратить утечку памяти.
Если вам нужно Bitmap
не BitmapDrawable
, просто верните растровое изображение.
Edit2:
ThirdActivity.java:
public class ThirdActivity extends ActionBarActivity {
private static final int REQUEST_IMAGE = 0;
private Bitmap bitmapToResize;
private Button mGetImageButton;
private Button mResizeButton;
private ImageView mImageViewForGallery;
private ImageView mImageVIewForDrable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
mGetImageButton = (Button) findViewById(R.id.button_getImage);
mGetImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// SET action AND miniType
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
// REQUEST Uri of image
startActivityForResult(intent, REQUEST_IMAGE);
}
});
mResizeButton = (Button) findViewById(R.id.button_resize);
mResizeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
resize();
}
});
mImageViewForGallery = (ImageView) findViewById(R.id.imageView);
mImageVIewForDrable = (ImageView) findViewById(R.id.imageViewFromDrable);
mImageVIewForDrable.setImageDrawable(getResources().getDrawable(R.drawable.ic_launcher));
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK) {return;}
if (requestCode == REQUEST_IMAGE) {
Uri uri = data.getData();
// SET image
mImageViewForGallery.setImageURI(uri);
Drawable drawable = mImageViewForGallery.getDrawable();
Log.e("asd", "Height:" + drawable.getIntrinsicHeight());
Log.e("asd", "Width:" + drawable.getIntrinsicWidth());
}
}
private void resize() {
if (mImageViewForGallery.getDrawable() != null) {
bitmapToResize = drawableToBitmap(mImageVIewForDrable.getDrawable());
int width = mImageViewForGallery.getDrawable().getIntrinsicWidth();
int height = mImageViewForGallery.getDrawable().getIntrinsicHeight();
bitmapToResize = zoomBitmap(bitmapToResize, width, height);
mImageVIewForDrable.setImageBitmap(bitmapToResize);
} else {
Log.e("asd", "setImageFirst");
}
}
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 drawableToBitmap(Drawable drawable) {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, drawable
.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas);
return bitmap;
}
}
activity_third.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@android:color/darker_gray"
tools:context="com.ch.summerrunner.ThirdActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray">
<Button
android:id="@+id/button_getImage"
android:text="@string/gallery"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button_resize"
android:text="@string/resize"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_toRightOf="@id/button_getImage"/>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@android:color/white"
android:layout_below="@id/button_getImage"/>
<ImageView
android:id="@+id/imageViewFromDrable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:layout_below="@id/imageView"/>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
Bitmap bmpIn = BitmapFactory.decodeResource(view.getResources(), R.drawable.image);
BitMap bmpOut = Bitmap.createScaledBitmap(bmpIn, width, height, false);
У меня уже есть изображения как на входе, так и на один уже в папке с возможностью переноса – AHF
- 1. cvCalcOpticalFlowPyrLK размер входного изображения
- 2. Как изменить размер входного аксессуара
- 3. Размер входного изображения в tf.gradients
- 4. Как изменить размер изображения?
- 5. Как изменить размер изображения?
- 6. Как изменить размер изображения
- 7. Как изменить размер изображения?
- 8. Как изменить размер изображения
- 9. Как изменить размер изображения?
- 10. Как изменить размер изображения
- 11. Как изменить размер изображения
- 12. как изменить размер изображения
- 13. Как изменить размер входного окна в Javascript
- 14. Тензорный поток, я хочу изменить размер входного изображения
- 15. Как изменить размер изображения с помощью imagemagick?
- 16. Как изменить размер изображения фона
- 17. Как изменить размер изображения qrencode.encode?
- 18. Как изменить размер растрового изображения?
- 19. Как изменить размер растрового изображения
- 20. Как изменить размер фонового изображения?
- 21. Blackberry - как изменить размер изображения?
- 22. Как изменить размер изображения UIBarButtonItem
- 23. Как изменить размер изображения JavaFX?
- 24. Как изменить размер изображения бренда?
- 25. Как изменить размер графического изображения?
- 26. Как изменить размер изображения изображения в javafx?
- 27. Как изменить размер изображения относительно другого изображения?
- 28. JavaME Изменить размер изображения
- 29. Node.js Изменить размер изображения
- 30. Изменить размер загруженного изображения
Где вы имеете дело с входным изображением? – AHF
Входное изображение из файловой системы или Интернета? Или камера? –
из мобильной галереи – AHF