Create simple effects for your images (IV) - 3D Projection

在 Android SDK 中有兩種 Camera classes。一個是 android.hardware.Camera,這是用來操控相機功能的類別。另一個是 android.graphics.Camera,這是什麼東西?今天我們就要來研究一下,這個類別能幫我們做些什麼事。

android.graphics.Camera 是一個可以讓你將 2D 物件在 3D 空間中移動,並將在其移動後的結果,畫在螢幕上的類別。

聽起來很有趣,是嗎?例如,最上面那張美女圖,你可以看出來,他是將原本的圖,以 Y 軸為軸心,旋轉約 30 度後,所畫出來的結果。

打開 android.graphics.Camera 的說明文件,你會發現,這個文件中只有下面這些 APIs 列表,什麼說明都沒有。

1. //Public Constructors
2. Camera()
3. //Public Methods
4. voidapplyToCanvas(Canvas canvas)
5. floatdotWithNormal(float dx, float dy, float dz)
6. voidgetMatrix(Matrix matrix)
7. voidrestore()
8. voidrotateX(float deg)
9. voidrotateY(float deg)
10. voidrotateZ(float deg)
11. voidsave()
12. voidtranslate(float x, float y, float z)

//Public Constructors Camera() //Public Methods void applyToCanvas(Canvas canvas) float dotWithNormal(float dx, float dy, float dz) void getMatrix(Matrix matrix) void restore() void rotateX(float deg) void rotateY(float deg) void rotateZ(float deg) void save() void translate(float x, float y, float z)

不過,從這些 APIs 的名稱與參數,你應該可以猜出一些端倪。沒錯,這個 Camera class,其實是個 helper class。他提供一些 APIs ,讓你控制要如何在 3D 空間中移動,最後再產生出合適的 Matrix ,讓你套用到 Canvas 的座標體系上。關於 Matrix,我在 幫圖片加上影像特效 (I) - 陰影特效 已經介紹過他的強大,還不知道的,先讀一下這篇。

用個例子來解釋這個 Camera 類別的用法,是最適當的。底下這個簡單的程式片段的結果,就是最上面那張圖。其中的 m_bmp 就是原本的美女圖。

1. camera = new Camera();
2. camera.translate(0, 0, 50);
3. camera.rotateY(30);
4. Matrix matrix3D = new Matrix();
5. camera.getMatrix(matrix3D);
6.
7. canvas.save();
8. canvas.translate(100, 100);
9. canvas.concat(matrix3D);
10.
11. canvas.drawBitmap(m_bmp, 0, 0, null);
12. canvas.restore();

camera = new Camera(); camera.translate(0, 0, 50); camera.rotateY(30); Matrix matrix3D = new Matrix(); camera.getMatrix(matrix3D); canvas.save(); canvas.translate(100, 100); canvas.concat(matrix3D); canvas.drawBitmap(m_bmp, 0, 0, null); canvas.restore();

從這個範例程式中,我們知道,你可以利用 Camera.translate() 及 Camera.rotateXXX() 等 APIs 在 3D 空間中移動。其實,這些 APIs 就是在操作 Matrix 的內容。最後,你只要呼叫 Camera.getMatrix() 即可將這 Matrix 的內容抓出,並套到 Canvas 上。

在 Android ,要做出 3D 的效果,你當然可以用 OpenGL 的函式。不過,如果你需要更快的顯示速度,或者只是要做個簡單的 3D 特效,那千萬不要忘了這個 android.graphics.Camera。

更多相关文章

  1. 开源项目Universal Image Loader for Android(安卓)说明文档 (1)
  2. Android中AES加密解密。解决密文不唯一、解密不出明文问题
  3. Android图片特效处理(像素处理)
  4. Android下Skia遮罩特效的实现
  5. Android实现中轴旋转特效 Android制作别样的图片浏览器
  6. Camera360 3.0 Android手機攝影大師洗心革面速度大升級
  7. Android动画特效
  8. Android开发--身高体重指数(BIM)计算--访问标识符号(android:id属性/
  9. android Logcat报错 CLEARTEXT communication to 192.168.1.2 no

随机推荐

  1. Android(安卓)UI开发第三十九篇――Tab界
  2. OPhone/Android的学习(3)—再熟悉几个常
  3. Android(安卓)应用界面显示流程
  4. 四极管:Android开机logo制作
  5. 可靠的功能测试--Espresso和Dagger2
  6. Android上在两个Activity之间传递Bitmap
  7. Android进程说明
  8. android The project target (Android(安
  9. Android之MessageQueue、Looper、Handler
  10. Android(安卓)WebView中javascript和java