我正在尝试使用以下函数将位图旋转90度.它的问题在于,当高度和宽度不相等时,它会切断部分图像.
注意returnBitmap width = original.height,它的height = original.width
任何人都可以帮我解决这个问题或指出我做错了什么?
private Bitmap rotateImage90(Bitmap b)
{
Bitmap returnBitmap = new Bitmap(b.Height, b.Width);
Graphics g = Graphics.FromImage(returnBitmap);
g.TranslateTransform((float)b.Width / 2, (float)b.Height / 2);
g.RotateTransform(90);
g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2);
g.DrawImage(b, new Point(0, 0));
return returnBitmap;
}
Run Code Online (Sandbox Code Playgroud) 我有一个摩托罗拉Defy OS Android 2.1,我用相机预览版制作了一个应用程序.问题是相机在搭载Android 2.1的三星Galaxy S上工作正常,但在摩托罗拉上,相机旋转90度.我试过这样做:
Parameters parameters = camera.getParameters();
parameters.setRotation(90);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我还没有找到任何解决方案.
我发现onPictureTaken保存的位图是围绕y轴镜像的,并且顺时针旋转了90度,即使相机预览没有.这是在我的Nexus S上运行2.3.6.在带有4.2的Nexus 4上运行的相同程序生成的位图围绕y轴镜像并顺时针旋转180度.
这是我正在运行的代码onPictureTaken:
@Override
public void onPictureTaken(final byte[] data, Camera camera) {
Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length);
String path = MediaStore.Images.Media.insertImage(getContentResolver(), picture, "name" , "description");
Log.e("tag", "path: " + path); // prints something like "path: content://media/external/images/media/819"
try {
ExifInterface exif = new ExifInterface(path); // prints this error: "04-25 21:28:21.063: E/JHEAD(12201): can't open 'content://media/external/images/media/819'"
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
Log.e("tag", "exif orientation: " + orientation); // this is outputting orientation unknown
} catch (IOException e) …Run Code Online (Sandbox Code Playgroud)