Продолжим тему работы с изображениями. Допустим теперь нам нужно сделать картинке эм.. обрезание (crop). Задача такова: из исходного изображения вырезать прямогульник с произовальными координатами. Например так, как показано на иллюстрации:

Сверху — исоходное изображение, снизу — два вырезанных квадрата.

Опять задачу вполне по силам решить одним методом:


public static Bitmap getCroppedBitmap(Bitmap source, int left, int top, int bottom, int right) {

if (source == null) {
return null;
}

final int sourceWidth = source.getWidth();
final int sourceHeight = source.getHeight();
final int outputWidth = right - left;
final int outputHeight = bottom - top;

if (sourceWidth < outputWidth || sourceHeight < outputHeight) {
throw new IllegalArgumentException("Destination size larget than source size. Cant crop that way.");
}

final Bitmap output = Bitmap.createBitmap(outputWidth, outputHeight, Bitmap.Config.ARGB_8888);

final Rect dest = new Rect(0, 0, outputWidth, outputHeight);
final Rect src = new Rect(left, top, right, bottom);

Canvas canvas = new Canvas(output);
canvas.drawBitmap(source, src, dest, new Paint());

return output;
}

Легко и просто! Как видите, если попытатся ухватить кусок изображения, больший исходного, вылетит икслючение.

Код тестовой Activity:


public class ImageProccessorActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final ImageView imageViewRaw = (ImageView) findViewById(R.id.imageView_raw);
final ImageView imageViewNew = (ImageView) findViewById(R.id.imageView_new);

try {
final Bitmap raw = BitmapFactory.decodeStream(getAssets().open("stubimage.jpeg"));
imageViewRaw.setImageBitmap(raw);

final int thirdPartOfImageW = raw.getWidth()/3;
final int thirdPartOfImageH = raw.getHeight()/3;


final Bitmap processed = ImageProccessor.getCroppedBitmap(raw, 0, thirdPartOfImageH,
2*thirdPartOfImageW, 2*thirdPartOfImageH);

imageViewNew.setImageBitmap(processed);
} catch (IOException e) {
e.printStackTrace();
}
}
}

И ее разметка:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFFFF"
android:orientation="vertical"
android:gravity="center" >
<ImageView
android:id="@+id/imageView_raw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:background="#00FFFFFF"/>
<ImageView
android:id="@+id/imageView_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:background="#00FFFFFF" />
</LinearLayout>

На этом все. Не переключайте канал, оставайтесь с нами)

Код тут.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *