2015-11-02 3 views
1

Я разрабатываю приложение для фотографии, в котором я хочу выбрать конкретный раздел фотографии и растянуть только эту часть. Как это сделать? Я попытался растянуть фотографию, используя Canvas, но не смог этого сделать. Возможно ли это от android.graphics.NinePatch класс? Любые предложения?Android, как растянуть конкретный раздел изображения?

+0

возможный дубликат http://stackoverflow.com/questions/14177546/android-cut-a-part-off-a-bitmap-and -scale-it – NIPHIN

+0

@NIPHIN Я не хочу вырезать часть изображения или растровое изображение, хочу растянуть выбранную область изображения и слить на исходное изображение. –

+0

Почему вы не используете щепотку, чтобы увеличить выделенную область и сохранить этот холст в виде растрового изображения? –

ответ

0

А довольно уродливое решение будет использовать image cropping library. Вы можете использовать его, чтобы временно обрезать часть изображения и загрузить его в другой ImageView, а затем масштабировать его.

Также вы можете сделать все, не используя CropImageView. Идея заключается в том, что когда пользователь прикасается к исходному представлению изображения, вам предоставляется (x, y), на котором находится палец пользователя. Таким образом, вы можете извлечь растровое изображение с центром в (x, y) и с заданным радиусом.

Для применения эффекта лупы вы можете использовать round/circular ImageView для отображения увеличенной части изображения.

Что-то вроде этого:

enter image description here

+0

Я уже использовал эти библиотеки, но я не хочу обрезать. Я хочу растянуть часть изображения и слить на оригинальное изображение одновременно. –

+0

@HarshitRathi Что вы подразумеваете под "stretch"? масштабировать или перетаскивать, чтобы размазать? –

+0

Это означает увеличить часть изображения и применить к оригинальному изображению. –

0

Вы можете использовать матрицу, чтобы применить новое измерение к вашему растровому изображению. Вы можете использовать setscale/postScale методы матричного объекта.

+0

Как это возможно, есть ли у вас пример? –

0

Наконец я нашел решение моей проблемы ниже:

Bitmap stretchImage = Bitmap.createBitmap(w, h+progress, Bitmap.Config.ARGB_8888); 

       c = new Canvas(stretchImage); 

       //draw top bit 
       c.drawBitmap(normalImage, new Rect(0,0,w,75), new Rect(0,0,w,75), null); 

       //draw middle bit 
       c.drawBitmap(normalImage, new Rect(0,75,w, 150), new Rect(0,75,w,150+progress), null); 

       //draw right bit 
       c.drawBitmap(normalImage, new Rect(0 ,150,w,225), new Rect(0 ,150+progress,w,225+progress), null); 

       myImage.setImageBitmap(stretchImage); 
Смежные вопросы