【发布时间】:2011-07-02 01:25:14
【问题描述】:
我有一张图片(位图),我想绘制一些形状并旋转 上面有文字。
只要图片不会太大,它就可以正常工作。然而, 使用内置照片(2560 x 1920 像素)拍摄时 我的 android 2.1 手机的相机,结果失真。 在绘制旋转后的文本后,看起来旋转回来了 没有完成。此外,失真点并不总是相同的, 喜欢它取决于cpu的使用情况。
你可以在这里看到一些结果图片:
http://dl.dropbox.com/u/4751612/Result1.png
http://dl.dropbox.com/u/4751612/Result2.png
代码在 AsyncTask 中执行。奇怪的是,这段代码在一个 Activity 中运行良好,但在另一个 Activity 中却不行。在这两个活动中,单击按钮时都会执行 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();
提前感谢您的帮助。
【问题讨论】:
-
Canvas.rotate() 实际上并不旋转画布中已有的位图……它只会影响后续的绘图操作。
-
我不知道。感谢您的澄清。
标签: android text bitmap rotation mediastore