Intereting Posts
Нет предложений по умолчанию в Eclipse Juno Error: Ошибка: недопустимые типы целых чисел (в 'layout_height' со значением '10') Как отключить взаимодействие с видео html5 в веб-просмотре или правильно перехватить их исключения? Параметры android getSpans Простой пример для Intent и Bundle IR передает класс ConsumerIrManager после того, как Android 4.4 не работает Действие onDestroy / Fragment's onDestroyView set Null practice Сохраняет ли WebView saveState () переменные Javascript / среду? Зависимость HTTP-клиента apache в андроиде с API Google Как передать событие перехода на контейнер в андроид? Просмотр в режиме прокрутки на экране Android Listview в PopupWindow onitemclick не работает на каком-либо устройстве GetChildFragmentManager () и библиотеки поддержки Как получить Gradle для Android, чтобы найти тестовый код библиотеки из другого тестового кода? Как сбрасывать компоненты компонента пользовательского интерфейса Android и его данные, чтобы помочь решить трудновоспроизводимые ошибки

Как создать белую границу вокруг растрового изображения?

Например, я хочу белую границу 10 пикселей вокруг всех 4 сторон растрового изображения. Я не использую его для просмотра изображений. Я использую этот код для обрезки изображения. Могу ли я узнать, как добавить в него белую рамку?

public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) { int sourceWidth = source.getWidth(); int sourceHeight = source.getHeight(); // Compute the scaling factors to fit the new height and width, respectively. // To cover the final image, the final scaling will be the bigger // of these two. float xScale = (float) newWidth / sourceWidth; float yScale = (float) newHeight / sourceHeight; float scale = Math.max(xScale, yScale); // Now get the size of the source bitmap when scaled float scaledWidth = scale * sourceWidth; float scaledHeight = scale * sourceHeight; // Let's find out the upper left coordinates if the scaled bitmap // should be centered in the new size give by the parameters float left = (newWidth - scaledWidth) / 2; float top = (newHeight - scaledHeight) / 2; // The target rectangle for the new, scaled version of the source bitmap will now // be RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight); // Finally, we create a new bitmap of the specified size and draw our new, // scaled bitmap onto it. Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig()); Canvas canvas = new Canvas(dest); canvas.drawBitmap(source, null, targetRect, null); return dest; } 

Solutions Collecting From Web of "Как создать белую границу вокруг растрового изображения?"

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

 RectF targetRect = new RectF(left+10, top+10, left + scaledWidth, top + scaledHeight); Bitmap dest = Bitmap.createBitmap(newWidth+20, newHeight+20, source.getConfig()); Canvas canvas = new Canvas(dest); canvas.drawColor(Color.WHITE); canvas.drawBitmap(source, null, targetRect, null); 

Я написал для этого функцию:

 private Bitmap addWhiteBorder(Bitmap bmp, int borderSize) { Bitmap bmpWithBorder = Bitmap.createBitmap(bmp.getWidth() + borderSize * 2, bmp.getHeight() + borderSize * 2, bmp.getConfig()); Canvas canvas = new Canvas(bmpWithBorder); canvas.drawColor(Color.WHITE); canvas.drawBitmap(bmp, borderSize, borderSize, null); return bmpWithBorder; } 

В основном он создает новый битмап, добавляющий 2 * границы к каждому измерению, а затем рисует исходный битмап поверх него, компенсируя его с помощью рамки.

Вы можете нарисовать 4 прямоугольника после рисования материала растрового изображения.

 point 0,0,3,sizey point 0,0,sizex,3 point 0,sizey-3,sizex,sizey point sizex-3,0,sizex,sizey 

Очень простой способ сделать это – установить фон ImageView в белый цвет и добавить значение заполнения.

Если это не сработает, создайте FrameLayout с w / h wrap_content, установите его фон на белый, поместите ImageView в него и установите поля ImageView на нужную ширину границы.

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

Вы можете создать свой targetRectangle 20px более широкий и 20px выше

 RectF targetRect = new RectF(left, top, left + scaledWidth + 20, top + scaledHeight + 20); 

И нарисуйте белый фон

Попробуйте это, он также добавит границу вашему холсту

  canvas.drawLine(0, 0, canvas.getWidth(), 0, paint2); canvas.drawLine(0, 0, 0, canvas.getHeight(), paint2); canvas.drawLine(0, canvas.getHeight(), canvas.getWidth(), canvas.getHeight(), paint2); canvas.drawLine(canvas.getWidth(), 0, canvas.getWidth(), canvas.getHeight(), paint2);