写真(ビットマップ)があり、その上にいくつかの図形と回転したテキストを描画したいと思います。
画像が大きくなりすぎない限り、これは問題なく機能します。ただし、Android 2.1スマートフォンの内蔵カメラで撮影した写真(2560 x 1920ピクセル)を使用すると、結果が歪んでしまいます。回転したテキストを描画した後、回転が完了していないようです。また、CPU使用率に依存するため、歪みポイントは常に同じであるとは限りません。
ここでいくつかの結果の写真を見ることができます:http:
//dl.dropbox.com/u/4751612/Result1.png
http://dl.dropbox.com/u/4751612/Result2.png
コードはAsyncTask内で実行されます。奇妙なことに、このコードは1つのアクティビティでは正常に機能しますが、別のアクティビティでは機能しません。どちらのアクティビティでも、ボタンがクリックされると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();
助けてくれてありがとう。