Intereting Posts
Доступ к UserDictionary Content Provider на уровне API Android 23 Что вызывает ошибки «постоянного выражения» для генерируемых значений R.id.xxx в операторах switch? Есть ли способ заставить EditText начать печатать в верхнем левом углу EditText? Использовать новый firebase sdk в проекте eclipse для Android Как я могу использовать обертку TabHost, содержащую MapView, который также отображает над ним представление AdMob? Прослушивание состояния WIFI Kapt Сбой сборки с процессором Android Dagger Android Как открыть последнюю активность при нажатии уведомления Выравнивание вкладок PagerTabStrip влево Android View Видимость GONE Android – Webview применяет только заголовки к первоначальному запросу Использование андроид-анимационного списка Android – открыть или перезапустить приложение после нажатия push-уведомления с использованием действий флага Появилась анимация SnackBar Каков ответ отмененного продукта подписки от разработчика google разработчика api 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);