Когда я создаю Bitmap
и Canvas
со следующим кодом:
Bitmap bitmap = Bitmap.createBitmap(640, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
и я поставил точку останова во второй строке, чтобы отобразить превью, оказывается размер созданного Bitmap
отличается от указанного. Он должен быть шириной 640px
, но в превью написано, что вместо этого он 377px
.
Высота уменьшается на тот же коэффициент (640/377
совпадает с 1737/1024
), поэтому я предполагаю, что там происходит какое-то нежелательное масштабирование.
Интересно, что bitmap.getWidth()
возвращает 640
.
Сначала я подумал, что это может быть проблема, связанная с предварительным просмотром отладчика, но я проверил это, когда загружаю некоторые изображения, используя:
BitmapFactory.decodeResource(context.resources, R.drawable.image)
и я масштабирую их позже до нужной ширины:
Bitmap.createScaledBitmap(bitmap, desiredWidthPx, targetHeightToKeepAspectRatio, false)
предварительный просмотр отладчика показывает их правильно, т.е. их размер соответствует desiredWidthPx
и targetHeightToKeepAspectRatio
. Так что это не проблема предварительного просмотра.
Для контекста: я наткнулся на эту проблему, работая над Bitmap
с определенной шириной в пикселях. Позже Bitmap
будет напечатан на термопринтере, поэтому размер не должен зависеть от размера экрана Android-устройства, плотности и так далее. Я начал отлаживать эту проблему после того, как понял, что принтер печатает около 60% изображения (оно было обрезано по горизонтали), например. что-то вроде этого:
Я не уверен точно, что происходит, но, глядя на распечатки, я думаю, что разумно подозревать, что проблема здесь в масштабировании.
Вместо этого вы можете использовать BufferedImage: https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html
Размер растрового изображения в предварительном просмотре отладки ограничен 1024 пикселями независимо от метода, использованного для его создания. Похожие вопрос и трекер задач. Ваша проблема с принтером не связана с ним.
Вау, это так удивительно. Кажется, ты прав. Я убедился в этом, увеличив растровое изображение до размера, превышающего 1024 пикселя, и проверив предварительный просмотр. В этом случае проблема должна быть где-то в другом месте. Большое спасибо.