Android之bitmap的镜像3D翻转(绕x轴 Y轴)
2015-12-03 18:15
471 查看
主要运用到的是graphics下面的camera类。大家不要误以为是handware下面的哦。
import android.graphics.Camera;
private Camera camera;
camera = new Camera();
/**
* 翻转图片
*
* @param isLeftOrRight
*/
private void roatePicture(boolean isLeftOrRight, Bitmap bitmap) {
camera.save();
Matrix matrix = new Matrix();
// rotate
if (isLeftOrRight) {
camera.rotateY(180);
} else {
camera.rotateX(180);
}
camera.getMatrix(matrix);
// 恢复到之前的初始状态。
camera.restore();
// 设置图像处理的中心点
matrix.preTranslate(bitmap.getWidth() >> 1, bitmap.getHeight() >> 1);
// matrix.preSkew(10, 10);
matrix.postTranslate(bitmap.getWidth(), bitmap.getHeight());
// matrix.postSkew(skewX, skewY);
// 直接setSkew(),则前面处理的rotate()、translate()等等都将无效。
// matrix.setSkew(skewX, skewY);
// 2.通过矩阵生成新图像(或直接作用于Canvas)
Bitmap newBit = null;
try {
// 经过矩阵转换后的图像宽高有可能不大于0,此时会抛出IllegalArgumentException
newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
} catch (IllegalArgumentException iae) {
iae.printStackTrace();
}
if (newBit != null) {
// show_image.mImageView.setLayout(false);
show_image.setImageBitmap(newBit);
tempBitmap = newBit;
}
}
import android.graphics.Camera;
private Camera camera;
camera = new Camera();
/**
* 翻转图片
*
* @param isLeftOrRight
*/
private void roatePicture(boolean isLeftOrRight, Bitmap bitmap) {
camera.save();
Matrix matrix = new Matrix();
// rotate
if (isLeftOrRight) {
camera.rotateY(180);
} else {
camera.rotateX(180);
}
camera.getMatrix(matrix);
// 恢复到之前的初始状态。
camera.restore();
// 设置图像处理的中心点
matrix.preTranslate(bitmap.getWidth() >> 1, bitmap.getHeight() >> 1);
// matrix.preSkew(10, 10);
matrix.postTranslate(bitmap.getWidth(), bitmap.getHeight());
// matrix.postSkew(skewX, skewY);
// 直接setSkew(),则前面处理的rotate()、translate()等等都将无效。
// matrix.setSkew(skewX, skewY);
// 2.通过矩阵生成新图像(或直接作用于Canvas)
Bitmap newBit = null;
try {
// 经过矩阵转换后的图像宽高有可能不大于0,此时会抛出IllegalArgumentException
newBit = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
} catch (IllegalArgumentException iae) {
iae.printStackTrace();
}
if (newBit != null) {
// show_image.mImageView.setLayout(false);
show_image.setImageBitmap(newBit);
tempBitmap = newBit;
}
}
相关文章推荐
- android String Resources
- 关于Android5.0以上屏幕截图探索总结
- Android在dialog中如何隐藏输入法
- Android处理滑动与点击事件的冲突
- Android测试教程9--聊聊配置测试环境的一些问题
- 用system.env获取到的android的环境变量
- android和iOS平台的崩溃捕获和收集
- Android进阶之路——NDK(二)
- Android 检测 手机硬件状态 的Utils
- android-Menu Resource
- Android动态换肤开源库Colorful发布
- 如何优化 Android Studio 启动、编译和运行速度?
- 应用中添加QQ群(android、iOS、网页、二维码)
- Android设置Settings:PreferenceFragment【4】
- 【Android效果集】学习ExplosionField之粒子破碎效果
- Android设置Settings:ListPreference【3】
- Android动态加载黑科技 动态创建Activity模式
- Android设置Settings:预读取设置的选项和更新设置结果【2】
- Android 4.4Telephony流程分析SIM卡开机时的初始化
- Android Studio系列教程六--Gradle多渠道打包