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 voidapplyToCanvas(Canvas canvas) float dotWithNormal(float dx, float dy,float dz) void getMatrix(Matrix matrix) void restore() voidrotateX(float deg) void rotateY(float deg) void rotateZ(float deg) voidsave() void translate(float x, float y, float z)
不,些 APIs 的名,你可以猜出一些端倪。, Camera class,其是 helperclass。他提供一些 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。
我在做相机开发,想设置其焦距
这是我从网上找到关于焦距设置的方案
就是手机上有个应用!它是可以实现变焦的!但是,我的应用不行;
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这款软件,也实现了变焦!
不知道他们是怎么实现的!!???