На андроиде я рисую в android.graphics.Picture, затем сохраняю изображение в файл. Позже я перезаряжаю картинку в память и рисую ее на холст. Я заметил, что битмапы никогда не рисовались. И после большой отладки мне удалось сузить проблему до Picture.writeToStream и Picture.createFromStream. Кажется, что растровые изображения, нарисованные на картинке, не перезаряжаются должным образом. Ниже приведен пример кода, который я написал, чтобы показать проблему. В этом примере мое полотно не аппаратно ускорено.android Picture.createFromStream не перезагружает растровые изображения
Так мои вопросы заключаются в следующем:
- я делаю что-то не так?
- Является ли это ошибкой Android? Я подал сообщение об ошибке https://code.google.com/p/android/issues/detail?id=54896, потому что я думаю, что это так.
Любое известное обходное решение?
@Override protected void onDraw(Canvas canvas) { try { Picture picture = new Picture(); // Create a bitmap Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888); Canvas bitmapCanvas = new Canvas(bitmap); bitmapCanvas.drawARGB(255, 0, 255, 0); // Draw the bitmap to the picture's canvas. Canvas pictureCanvas = picture.beginRecording(canvas.getWidth(), canvas.getHeight()); RectF dstRect = new RectF(0, 0, 200, 200); pictureCanvas.drawBitmap(bitmap, null, dstRect, null); picture.endRecording(); // Save the Picture to a file. File file = File.createTempFile("cache", ".pic"); FileOutputStream os = new FileOutputStream(file); picture.writeToStream(os); os.close(); // Read the picture back in FileInputStream in = new FileInputStream(file); Picture cachedPicture = Picture.createFromStream(in); // Draw the cached picture to the view's canvas. This won't draw the bitmap! canvas.drawPicture(cachedPicture); // Uncomment the following line to see that Drawing the Picture without reloading // it from disk works fine. //canvas.drawPicture(picture); } catch (Exception e) { } }
Да, я знаю об этом. Я сказал: «В этом примере мое полотно не аппаратно ускорено». – Nathan