`

android.graphics.Camera, 3D 的效果

阅读更多

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.   void  applyToCanvas(Canvas canvas)  
   5.   float  dotWithNormal(float dx, float dy, float dz)  
   6.   void  getMatrix(Matrix matrix)  
   7.   void  restore()  
   8.   void  rotateX(float deg)  
   9.   void  rotateY(float deg)  
  10.   void  rotateZ(float deg)  
  11.   void  save()  
  12.   void  translate(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。

分享到:
评论
3 楼 snso001 2013-08-05  
请用简体。。。
2 楼 haojunming11 2011-09-21  

我在做相机开发,想设置其焦距
这是我从网上找到关于焦距设置的方案

就是手机上有个应用!它是可以实现变焦的!但是,我的应用不行;

Camera.getParameters().isZoomSupported() -->true
Camera.getParameters().isSmoothZoomSupported() -->false

这种情况下,我怎么才能实现变焦呢??

我有两个手机:
A.moto me1 ZoomSupported和SmoothZoom都是支持的,我测试了,可以实现变焦!
B.HTC G8就是上面这种情况,ZoomSupported支持,SmoothZoom不支持,所以调用:Camera.startSmoothZoom(zoom)就没反应了,但是它手机上带了一个拍照程序,有变焦功能,说明SmoothZoom不支持的情况下应该也是可以实现变焦功能的!
我尝试了,使用
Camera.getParameters().setZoom(zoom);
或者:
Camera.Parameters localParameters = mCamera.getParameters();
mCamera.getParameters().set("taking-picture-zoom", zoom);
localParameters.set("taking-picture-zoom", zoom);
都没反应!
是不是改变了zoom后,还需要是操作???


另外我将,HTC自带的拍照程序反编译了一下,它代码里,没有发现调用过:
Camera.startSmoothZoom(zoom);
但是有发现,调用过:
Camera.Parameters localParameters = mCamera.getParameters();
mCamera.getParameters().set("taking-picture-zoom", zoom);
localParameters.set("taking-picture-zoom", zoom);
还有就是发现它用了一个.so的动态链接库!

还有,Camera360这款软件,也实现了变焦!

不知道他们是怎么实现的!!???

1 楼 rnmichelle 2011-03-15  
文章是讲的简单明了,但是你的实例图(什么最上面的美女图)在哪啊?看不到效果嘛

相关推荐

    Android利用Camera实现中轴3D卡牌翻转效果

    第二个应用于手机硬件中的相机相关的操作,本文讲述的是利用第一个Camera类实现中轴3D转换的卡牌翻转效果,开始之前,先看一下Android系统中的坐标系: 对应于三维坐标系中的三个方向,Camera提供了三种旋转方法: ...

    Android的3D旋转

    在Android中,我们可以使用`android.view.animation`包下的`RotateAnimation`类来创建2D旋转动画,但若要实现3D旋转,则需要利用到`android.graphics.Matrix`类和`Camera`类。 `Matrix`类是Android图形系统的基础,...

    Hello Android.rar

    10.1 Understanding 3D Graphics.... 198 10.2 Introducing OpenGL..... 199 10.3 Building an OpenGL Program...200 10.4 Rendering the Scene..... 202 10.5 Building a Model..... . . 206 10.6 Lights, ...

    Android使用Camera进行3D旋转

    在Android平台上,开发人员可以利用Android的Graphics子系统来实现丰富的图形效果,其中包括对3D对象的旋转。本文将深入探讨如何使用`Camera`类在Android应用中执行3D旋转,以此来创建动态且引人入胜的用户界面。 `...

    android 立方体旋转效果

    本实例中的"android 立方体旋转效果"利用了Android的`android.graphics.Camera`类来实现,这是一个用于处理2D到3D转换的核心类。下面我们将详细探讨如何使用这个类来创建立方体旋转动画。 首先,`android.graphics....

    Wrox.Professional.Android.Application.Development

    * Advanced development topics including security, IPC, advanced 2D / 3D graphics techniques, and user–hardware interaction. Who this book is for This book is for anyone interested in creating ...

    android平台libgdx 解析obj文件

    在Android平台上,开发游戏或3D应用时,我们经常需要导入和处理3D模型。OBJ文件是一种常见的3D模型格式,由Wavefront公司开发,它包含几何数据、纹理坐标和法线信息。LibGDX是一个强大的跨平台游戏开发框架,支持...

    professional.Android.Application.Development.2009.pdf

    Extensive Media Support and 2D/3D Graphics 8 Optimized Memory and Process Management 8 Introducing the Open Handset Alliance 8 What Does Android Run On? 9 Why Develop for Android? 9 What Will ...

    Android程序开发初级教程(一)开始HelloAndroid.pdf

    - **Optimized Graphics**:包括2D图形库和基于OpenGL ES的3D实现。 - **SQLite**:用于数据存储的数据库系统。 - **Media Support**:支持多种音频、视频和图像格式(如MPEG4、MP3、AAC、AMR、JPG、PNG、GIF)。...

    unity3d拍照功能demo

    AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayerClass.GetStatic("currentActivity"); // 调用Android Java类...

    相机(Camera)实现3D效果

    相机(Camera)实现3D效果源码,android.graphics.Camera 实现简单的3D效果,其实这个代码,是原来学习的时候搜到的不过都老早了忘记是哪里的了。顺便在里面加了些注释 。看着效果图 对照代码 就特别明了了,各种组合...

    Android_GUI_System.

    OpenGL 3D引擎是Android GUI系统中另一个关键组件,它为开发者提供了强大的3D图形渲染能力。OpenGL ES API(通过`javax.microedition.khronos.opengles`包提供)使得开发者能够在Android平台上构建复杂的3D场景和...

    新版Android开发教程.rar

    ----------------------------...• 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 (硬件加速可选) • SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...

    OpenGLCamera2.zip

    1. **OpenGL ES**:OpenGL(Open Graphics Library)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。OpenGL ES是其针对嵌入式系统的精简版本,广泛应用于移动设备,如Android手机和平板。 2....

    Android GUI

    Android通过OpenGL ES (Open Graphics Library for Embedded Systems)支持3D图形的绘制。 - **实现**:在Java层,通过`javax.microedition.khronos.opengles`包提供OpenGL ES的API,这些API最终通过JNI调用底层...

    android-flip 类似Flipboard翻转动画的实现.zip源码资源下载

    这种动画通常通过视图的3D变换来实现,涉及到Android的`android.view.animation`和`android.graphics`包中的类。主要用到的类有`CardFlipAnimation`和`Camera`,它们共同协作创建出卡片翻转的效果。`...

    模拟立体翻转效果,非Gallery实现.zip

    - **3D转换**:使用`android.graphics.Camera`类进行3D转换,可以使视图具有更真实的立体感。通过调整相机的位置和角度,可以实现不同视角的翻转效果。 - **性能优化**:由于自定义动画可能会对性能产生影响,...

Global site tag (gtag.js) - Google Analytics