我有一个应用程序,可以在potrait模式下点击图像并将其保存在带有exyension png的SDCARD中。我在图像上使用了一个额外的叠加,然后保存它。我的图像以横向模式保存。
我尝试使用矩阵,但无法正确解决问题。
代码:此函数从包含所有图像字节数据的数组生成png。
public void generatePng(byte[][] global) {
for (int i = 1; i < 25; i++) {
// Matrix matrix = new Matrix();
// matrix.postRotate();
// createa matrix for the manipulation
Bitmap cameraBitmap = BitmapFactory.decodeByteArray(global[i], 0, global[i].length);
int wid = cameraBitmap.getWidth();
int hgt = cameraBitmap.getHeight();
Matrix matrix = new Matrix();
// resize the bit map
// matrix.postScale(scaleWidth, scaleHeight);
// rotate the Bitmap
matrix.postRotate(45);
Bitmap newImage = Bitmap.createBitmap
(cameraBitmap,0,0,wid, hgt, matrix,true);
Canvas canvas = new Canvas(newImage);
canvas.drawBitmap(cameraBitmap, 0f, 0f, null);
Drawable drawable = getResources().getDrawable(R.drawable.overlay11);
// drawable.
// drawable.setBounds(40, 40, drawable.getIntrinsicWidth() + 40, drawable.getIntrinsicHeight() + 40);
drawable.setBounds(0, 0, wid, hgt);
drawable.draw(canvas);
File mediaStorageDir = new File("/sdcard/", "pics");
File myImage = new File(mediaStorageDir.getPath() + File.separator + "pic" + glo + ".png");
Log.d("naval", "File path :" + myImage);
glo++;
try {
FileOutputStream out = new FileOutputStream(myImage);
newImage.compress(Bitmap.CompressFormat.JPEG, 80, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
Log.d("In Saving File", e + "");
} catch (IOException e) {
Log.d("In Saving File", e + "");
}
}
counter =0;
// camera.startPreview();
}
我认为我使用的叠加层会产生问题。 有两个问题
答案 0 :(得分:2)
我建议先使用Bitmap
检查ExifInterface
的方向。
ExifInterface exif = new ExifInterface(file.getAbsolutePath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
然后使用Matrix
轮换Bitmap
:
Matrix matrix = new Matrix();
if (orientation == 6) {
matrix.postRotate(90);
} else if (orientation == 3) {
matrix.postRotate(180);
} else if (orientation == 8) {
matrix.postRotate(270);
}
myBitmap = Bitmap.createBitmap(myBitmap, 0, 0, myBitmap.getWidth(), myBitmap.getHeight(), matrix, true);
然后,您最终可以将旋转的Bitmap
保存在SD卡中。确保将缩小的位图加载到内存中以避免java.lang.OutOfMemory
例外。
答案 1 :(得分:0)
matrix.postRotate(270);
这很有用。