Сохранение холста в растровое изображение на Android

У меня возникли трудности с размещением содержимого Canvas в Bitmap. Когда я пытаюсь это сделать, файл записывается с размером файла около 5,80 КБ, но он кажется совершенно пустым (каждый пиксель «# 000»).

Холст рисует ряд взаимосвязанных линий, образованных почерком. Ниже мой onDraw для просмотра. (Я знаю, что он блокирует поток пользовательских интерфейсов / неправильные методы / и т. Д., Однако мне просто нужно заставить его работать)

Спасибо.

@Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if (IsTouchDown) { // Calculate the points Path currentPath = new Path(); boolean IsFirst = true; for(Point point : currentPoints){ if(IsFirst){ IsFirst = false; currentPath.moveTo(point.x, point.y); } else { currentPath.lineTo(point.x, point.y); } } // Draw the path of points canvas.drawPath(currentPath, pen); // Attempt to make the bitmap and write it to a file. Bitmap toDisk = null; try { // TODO: Get the size of the canvas, replace the 640, 480 toDisk = Bitmap.createBitmap(640,480,Bitmap.Config.ARGB_8888); canvas.setBitmap(toDisk); toDisk.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("arun.jpg"))); } catch (Exception ex) { } } else { // Clear the points currentPoints.clear(); } } 

У меня была аналогичная проблема, и у меня есть решение. Здесь полный код задачи / не забывайте про разрешение android.permission.WRITE_EXTERNAL_STORAGE в манифесте /

  public Bitmap saveSignature(){ Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); this.draw(canvas); File file = new File(Environment.getExternalStorageDirectory() + "/sign.png"); try { bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file)); } catch (Exception e) { e.printStackTrace(); } return bitmap; } 

Вам придется рисовать после установки растрового изображения на холст. Также используйте новый объект Canvas, например:

 Canvas canvas = new Canvas(toDisk); canvas.drawPath(currentPath, pen); toDisk.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(new File("arun.png"))); 

Я рекомендую использовать PNG для сохранения изображений путей.

Сначала создайте пустое растровое изображение, затем создайте холст с этим пустым растровым изображением

  Bitmap.Config conf = Bitmap.Config.ARGB_8888; Bitmap bitmap_object = Bitmap.createBitmap(width, height, conf); Canvas canvas = new Canvas(bitmap_object); 

Теперь нарисуйте свои линии на холсте

  Path currentPath = new Path(); boolean IsFirst = true; for(Point point : currentPoints){ if(IsFirst){ IsFirst = false; currentPath.moveTo(point.x, point.y); } else { currentPath.lineTo(point.x, point.y); } } // Draw the path of points canvas.drawPath(currentPath, pen); 

Теперь получите доступ к вашему растровому изображению через bitmap_object

Вы должны вызвать canvas.setBitmap(bitmap); Прежде чем рисовать что-либо на холсте. После вызова canvas.setBitmap(bitmap); Нарисуйте Canvas а затем сохраните Bitmap вы передали Canvas .

Может быть

 canvas.setBitmap(toDisk); 

Не в правильном месте.

Попробуй это :

 toDisk = Bitmap.createBitmap(640,480,Bitmap.Config.ARGB_8888); toDisk.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("arun.jpg"))); canvas.setBitmap(toDisk); 
Intereting Posts
Получить информацию о запуске устройства или симулятора для веб-служб SOAP Широковещательный приемник. Огромные данные Android, Volley Request, ответ блокирует основной поток Не удалось найти модуль с дорожкой Gradle. Вместо ссылки на библиотеку Проблема с отображением ShapeDrawable в ImageView Распознавание лиц в Android? Зависимость компиляции Gradle не добавляется в classpath ViewPager внутри Fragment не показывает, несмотря на использование getChildFragmentManager () при создании FragmentPagerAdapter Android: просмотр списка Выбранный элемент -1 Шаг рисования постепенно в Android Удаление файла Android оставляет пустое место в галерее Каково ваше соглашение об именах для идентификаторов View? В Android, как я могу запросить MediaStore только для файлов по определенному пути? Или, альтернативно, только отображение файлов по определенному пути? AdMob из Служб Google Play будет выполнять нежелательную автоматическую прокрутку Размер одиночного элемента списка android