У меня есть изображение (растровое изображение), и я хочу нарисовать на нем несколько фигур и повернутый текст.
Это работает нормально, если изображение не становится слишком большим.Однако при использовании изображения (2560 x 1920 пикселей), сделанного встроенной камерой моего телефона с Android 2.1, результат искажается.Похоже, что вращение назад после рисования повернутого текста не было завершено.Кроме того, точка искажения не всегда одинакова, так как она зависит от использования процессора.
Здесь вы можете увидеть некоторые получающиеся изображения:http://dl.dropbox.com/u/4751612/Result1.pnghttp://dl.dropbox.com/u/4751612/Result2.png
Код выполняется внутри AsyncTask.Странно то, что этот код прекрасно работает в одном действии, но не в другом.В обоих действиях AsyncTask выполняется при нажатии кнопки.
Вот некоторые выдержки из кода, который я использую.
// Load the image from the MediaStore
c = MediaStore.Images.Media.query(context.getContentResolver(),
Uri.parse(drawing.fullImage), new String[] {MediaColumns.DATA});
if (c != null && c.moveToFirst()) {
imageFilePath = c.getString(0);
bitmap = ImageUtil.getBitmap(new File(imageFilePath), 10000);
}
c.close();
// Create a canvas to draw on
drawingBitmap = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
canvas = new Canvas(drawingBitmap);
// Draw image
canvas.drawBitmap(bitmap, 0, 0,
MeasureFactory.getMeasurePaint(context));
// calculate text width
rect = new Rect();
paint.getTextBounds(text, 0, text.length(), rect);
// Draw rotated text
canvas.save();
canvas.rotate(-angle, centerPoint.x, centerPoint.y);
canvas.drawText(text, centerPoint.x-Math.abs(rect.exactCenterX()),
Math.abs(centerPoint.y-rect.exactCenterY()), paint);
canvas.restore();
// Upload the bitmap to the Media Library
Uri uri =
getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values);
OutputStream outStream = getContentResolver().openOutputStream(uri);
drawingBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outStream);
outStream.flush();
outStream.close();
Заранее благодарен за любую помощь.