`

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旋转

    分享Android测试程序,使用Graphics.Camera进行3d旋转。

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

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

    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, ...

    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新闻广告条滚动效果

    项目中需要用到类似公告栏的控件,能用的基本不支持多行显示,于是只好自己动手,苦于没有自定义过一个像样的控件,借鉴Android公告条demo,实现了多行向上滚动的控件。...import android.graphics.Camera; import a

    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 ...

    相机(Camera)实现3D效果

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

    Beginning Android Tablet Programming

    If that includes you, you'll learn about how Honeycomb has changed the game for Android graphics programming, and get your first taste of 3D programming on an Android tablet. Lights, camera, action! ...

    新版Android开发教程.rar

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

    Android 8.0 compatibility list

    7.1.4. 2D and 3D Graphics Acceleration 7.1.4.1 OpenGL ES 7.1.4.2 Vulkan 7.1.4.3 RenderScript 7.1.4.4 2D Graphics Acceleration 7.1.4.5 Wide-gamut Displays 7.1.5. Legacy Application Compatibility Mode ...

    android系统原理及开发要点详解

     读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,这样可以达到事半功倍的效果。本书在重点代码中加上大量的注释,帮助读者阅读,对于非重点的代码,不占用本书的篇幅,读者可以参考开放的源...

    Android 4游戏编程入门经典

     5.5.3 androidgraphics:满足绘图需求  5.5.4 androidfastrenderview  5.6 androidgame:合并所有内容  5.7 小结 第6章 mr. nom入侵android  6.1 创建资源  6.2 建立项目  6.3 mrnomgame:主要活动  6.3.1 ...

    一个简单的WebGL的demo,软件Chrome,硬件Google cardboard

    It uses WebGL and #Three.js# to handle the 3D graphics and camera controls. See inline comments for tips. This code is purely experimental, so please keep that in mind when developing. Want to ...

    android 完全中文版 开发应用详解

    6.4.3 android的图形包(graphics) 125 6.5 android的opengl系统与3d图形系统 125 6.5.1 opengl的本地代码 125 6.5.2 opengl的jni代码 130 6.5.3 opengl的java类 130 第7章 android的audio系统 132 7.1 audio系统综述...

    Unity.in.Action.Multiplatform.Game.Development.in.Csharp

    Building a demo that puts you in 3D space 21 Adding enemies and projectiles to the 3D game 46 Developing graphics for your game 69 GETTING COMFORTABLE ........................................... 93 5 ...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    + Optimized graphics: 包含一个自定义的2D 图形库和基于 OpenGL ES 1.0 标准的3D 实现。 + SQLite: 数据库 + Media support: 通用的音频,视频和对各种图片格式的支持(MPEG4, H.264, MP3,AAC, AMR, JPG, PNG, GIF) ...

    Android实现IOS相机滑动控件

    Android也可以通过Graphics下面的Camera可以实现3D效果,开始尝试着用这个做了一下,效果不理想,滑动之后各组文字之间的距离就变了,从立体空间来说这是合逻辑的,但是看着很别捏。IOS相机的滑动效果文字之间的间隔...

    android游戏编程入门

     5.5.3 AndroidGraphics:满足  绘图需求 174  5.5.4 AndroidFastRenderView 178  5.6 AndroidGame:合并所有  内容 180  5.7 小结 184  第6章 Mr. Nom入侵Android 185  6.1 创建资源 185  6.2 建立项目 ...

    安卓(Android)程序开发初级教程技术文档【视频+教程+源码】

     + Optimized graphics: 包含一个自定义的2D图形库和基于OpenGL ES 1.0 标准的3D实现。  + SQLite: 数据库  + Media support: 通用的音频,视频和对各种图片格式的支持(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, ...

    Complete Virtual Reality and Augmented Reality Development with Unity-2019.epub

    Using a practical and project-based approach, this Learning Path educates you about the specifics of AR and VR development using Unity 2018 and Unity 3D. You'll learn to integrate, animate, and ...

Global site tag (gtag.js) - Google Analytics