2016-09-22 3 views
0

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

На моем телефоне, который является Asus Padfone X, сохраненное изображение получается отлично. На телефоне моих партнеров, примечание 6, позиционирование сохраненных изображений в результирующем растровом изображении отключено. (Смотрите пример ниже)

Я использую следующий код, чтобы сохранить imageviews для одного изображения:

Bitmap mainBmp = backImage.getDrawingCache(); 
Bitmap centerBmp = centerImage.getDrawingCache(); 
Bitmap handleBmp = handleImage.getDrawingCache(); 

Canvas canvas = new Canvas(mainBmp); 
canvas.drawBitmap(centerBmp, 17, 95, null); 
canvas.drawBitmap(handleBmp, 17, 85, null); 

что позволяет экономить должным образом на моем телефоне, но не один с большим экраном/высоким разрешением. Как обеспечить, чтобы полученное сохраненное изображение выглядело одинаково независимо от устройства, на котором оно было сохранено?

ПРИМЕР РАЗНИЦА

enter image description here

ответ

1

Вам нужно масштабировать. Например, скажем, что устройство 1 составляет 500x1000 пикселей, а устройство 2 - 600x1200. Допустим, битмап 300x400 и начинается со смещения 30 пикселей в x и 100 в y.

Растровое изображение должно расти в размере по отношению к размерам двух экранов. Таким образом, он должен быть 300 * (600/500) пикселей в ширину и 400 * (1200/1000) пикселей большой. Смещение должно также масштабироваться - до 30 * (600/500) и 100 * (1200/1000).

Обратите внимание, что при масштабировании вы можете получить растяжение, пикселизацию и другие дефекты изображения. Чем больше вы растянете, тем хуже будет. Сокращение также может привести к дефектам, но они, как правило, более незначительны.

Это простой случай - два экрана, которые я дал, имеют одинаковое соотношение сторон (отношение ширины: высота). В случае различных соотношений сторон вам необходимо выбрать:

1) Содержите пропорции изображения одинаково. Это означает, что у вас будет пустое пространство в 1 направлении, но изображение не будет выполнено.

2) Разрешить изменение соотношения сторон изображения. Это не оставляет пробелов, но исказит изображение.

Для № 2 используйте тот же код, что и выше. Для №1 выясните, какое измерение необходимо масштабировать наименее, и используйте это для масштабирования x и y.

Невозможно масштабировать телефон любого размера до любого телефона без каких-либо дефектов на общем изображении. Вам нужно будет выбрать один из двух вариантов выше.

+0

Спасибо. Это было более чем информативное. Я ценю, что вы нашли время, чтобы обучить меня. –

0

Я также обнаружил, что если вместо этого использовать imageview.getWidth() и imageview.getHeight(), я могу расположить каждый «слой», где мне это нужно, независимо от размера экрана. Я протестировал этот метод на маленьком Android-устройстве вплоть до планшета, и сохраненное изображение получилось превосходным на всех устройствах.

Что я сделал, это определить размер пикселя для каждого изображения («слой») с помощью Photoshop. Затем я использовал онлайн-файл для dp calculator/converter для определения правильного размера dp каждого слоя. Я устанавливаю определенную ширину и высоту dp для каждого слоя в макете. Для каждого слоя, который мне нужно было сохранить на главном изображении, я вычислил размеры x и y, выбрав высоту и ширину mainimageviews и вычитая пиксели, необходимые от края, к соответствующему краю этого слоя.Через пробную версию и ошибку я несколько раз запускал приложение, чтобы получить точное расположение каждого слоя, который я хотел. Результат сохраненного изображения был точно таким, каким он выглядел для пользователя. Надеюсь, это поможет кому-то еще в будущем.

Смежные вопросы