Преобразование изображения в PCL и печать через Bluetooth
Проблема:
Используя устройство Android, без подключения к Интернету / сети, я должен распечатать изображения на принтере с поддержкой Bluetooth.
Имейте в виду, что это бизнес-кейс - я не могу использовать Google Cloud Print и не могу использовать PrinterShare или что-то подобное. Данные, генерируемые приложением, носят медицинский характер и должны храниться в тайне и в приложении.
Что я достиг:
Создание данных PCL (только текст, без изображений) для отправки на соединение Bluetooth, которое принтер может обрабатывать и выводить.
Что я пробовал:
Генерация данных PCL (изображения) с использованием порта Android ImageMagick (находится здесь: https://github.com/paulasiimwe/Android-ImageMagick) и отправка сгенерированных данных PCL в соединение Bluetooth.
Результат:
Тарабарщина, но тарабарщина, которая, кажется, является правильными размерами изображения, которое я пытаюсь напечатать.
==============
Моя гипотеза состоит в том, что в моей реализации преобразования что-то есть, но я не уверен, что это такое.
Образец кода:
ПРИМЕЧАНИЕ: это является доказательством концептуальной работы и захватывает изображение из каталога Assets, делает его доступным, а затем преобразует его.
// Attempt to get image file from Assets folder
AssetManager assetManager = context.getAssets();
InputStream istr = assetManager.open("test.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(istr);
// Access External Storage Directory and save file
String root = Environment.getExternalStorageDirectory().toString();
File tempDirectory = new File(root + "/temp");
tempDirectory.mkdirs();
String fileName = "test.jpg";
File file = new File (tempDirectory, fileName);
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception exception) {
// Exception found
}
// Capture file of recently saved image, convert to PCL
try{
ImageInfo originalInfo = new ImageInfo(Environment.getExternalStorageDirectory().getAbsolutePath() + "/temp/test.jpg");
MagickImage mImage = new MagickImage(originalInfo);
String newInfoPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/temp/test.pcl";
mImage.setFileName(newInfoPath);
mImage.setImageFormat("pcl");
ImageInfo newInfo = new ImageInfo(newInfoPath);
mImage.writeImage(newInfo);
} catch (MagickException exception) {
// Exception found
}
Затем я извлекаю файл PCL и отправляю его в соединение Bluetooth (используя другой метод, который работает с использованием стандартных файлов PCL), но, как уже упоминалось, вывод является бессмысленным.
Я чувствую, что упускаю что-то простое, но просто не вижу этого.
Кроме того, я вижу следующее в LogCat, которое может / не может быть связано, но я не смог найти никакой информации о том, как решить эту проблему, и не могу определить, является ли это чем-то большим, чем предупреждение.
V/Magick: ThrowException
V/Magick: severity: 395
V/Magick: reason: UnableToOpenConfigureFile `policy.xml' @ warning/configure.c/GetConfigureOptions/589
V/Magick: Attempting to read from file /storage/emulated/0/temp/test.jpg
V/Magick: ThrowException
V/Magick: severity: 395
V/Magick: reason: UnableToOpenConfigureFile `magic.xml' @ warning/configure.c/GetConfigureOptions/589
V/Magick: OpenPixelCache()
V/Magick: - cache_info->columns: 144
V/Magick: - cache_info->rows: 144
V/Magick: - cache_info->offset: 0
V/Magick: - cache_info->length: 165888
V/Magick: - length: 207360
V/Magick: - create memory pixel cache
V/Magick: ReadImage completed
Кто-нибудь имеет опыт с этим или кто-нибудь может указать мне правильное направление?