mor*_*ing 5 android android-camera
我正在尝试使用应用了颜色效果的相机预览,例如NEGATIVE效果.没有错误,预览可见而没有问题,但独立于我设置的ColorEffect - 相机预览保持不变.我通过运行params.getSupportedColorEffects()来测试我试图使用的效果是否可用于我的手机(这些效果也适用于内置的照片应用).
我不知道代码有什么问题 - 我在下面发布它.也许这里有人知道什么可以使这项工作?提前致谢.
public class CustomCameraView extends SurfaceView{
Camera mCamera;
SurfaceHolder mHolder;
public CustomCameraView(Context context){
super(context);
mHolder = this.getHolder();
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mHolder.addCallback(mSurfaceHolderListener);
}
SurfaceHolder.Callback mSurfaceHolderListener = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
mCamera=Camera.open();
try {
mCamera.setPreviewDisplay(mHolder);
}
catch (Exception e){ }
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height)
{
Camera.Parameters params = mCamera.getParameters();
params.setColorEffect(Camera.Parameters.EFFECT_NEGATIVE);
mCamera.setParameters(params);
mCamera.startPreview();
}
public void surfaceDestroyed(SurfaceHolder arg0)
{
mCamera.stopPreview();
mCamera.release();
}
};
}
Run Code Online (Sandbox Code Playgroud)
经过一些测试后发现问题可能与我正在测试的HTC Desire(或者可能是它的操作系统版本)有关.该代码在其他一些三星手机上正常工作.我还没弄清楚HTC会出现什么问题.
更新:我设法让效果起作用,但真的是偶然的,我仍然不明白为什么.但我会在这里给出答案 - 或许有人会觉得它很有用,或者也许能解释为什么会这样:
我在surfaceChanged方法中添加了以下行,因为我试图减小预览的大小:
previewHolder.setFixedSize(width, height-1);
Run Code Online (Sandbox Code Playgroud)
这具有使所选效果可见的结果.
当我将此行更改为:
previewHolder.setFixedSize(width, height);
Run Code Online (Sandbox Code Playgroud)
效果再也不见了.太奇怪....它适用于设置高度小于接收高度参数.
我也一直在为此苦苦挣扎。我发现 HTC Desire 的相机需要一个奇怪的执行顺序setParameters,setPreviewDisplay才能startPreview使色彩效果发挥作用。顺序是:
Camera.Parameters parameters = camera.getParameters();
//set the parameters
camera.setParameters(parameters);
camera.startPreview();
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceHolder);
Run Code Online (Sandbox Code Playgroud)
startPreviewAndroid SDK 中记录了before调用setPreviewDisplay作为并行初始化相机和 SurfaceView 的一种方法。
关于您关于意外获得效果的更新,我也发生了同样的事情!我假设出于同样的原因,我的一些代码被快速连续调用两次(在我的例子中,由于数据库对象发生变化)。这导致该方法(重新)设置参数并(重新)启动预览被调用两次,从而产生所需的结果。在意识到这一点并进行更多实验后,上述顺序似乎适用于我的 HTC Desire 和 Acer Iconia A500,我对此非常满意。
然而,我刚刚收到我的应用程序的评论,称它在 HTC Desire HD 上生成损坏的图像,因此我建议不要使用此相机初始化顺序作为默认值,而是作为 HTC Desire 的修复程序。
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |