Я пытаюсь получить предварительный просмотр камеры с примененным к нему цветовым эффектом, например, эффект НЕГАТИВНОГО. Ошибок нет, и просмотр просматривается без проблем, но независимо от установленного ColorEffect - предварительный просмотр камеры остается неизменным. Я тестировал, если эффекты, которые я пытаюсь использовать, доступны для моего телефона, запустив params.getSupportedColorEffects() (также эти эффекты также работают во встроенном приложении для фотографий).ColorEffect не отображается на предварительном просмотре камеры
Я понятия не имею, что не так с кодом - я размещаю его ниже. Возможно, у кого-то есть идея, что может сделать эту работу? Заранее спасибо.
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();
}
};
}
После некоторого тестирования выяснилось, проблема может быть связана с HTC Desire я тестирование на (или, возможно, его версия ОС). Код работает правильно на некоторых других телефонах Samsung. Я не понял, что может быть проблемой для HTC.
UPDATE: мне удалось получить эффект работает, но действительно случайно, и я до сих пор не понимаю, почему. Но я дам здесь ответ - возможно, кто-то найдет это полезным или, может быть, сможет объяснить, почему так происходит:
Я добавил следующую строку в метод surfaceChanged
, потому что я пытался уменьшить размер Предварительный просмотр:
previewHolder.setFixedSize(width, height-1);
Это привело к тому, что выбранный эффект стал видимым.
Когда я изменил эту строку:
previewHolder.setFixedSize(width, height);
эффект не было видно больше раз. Так странно .... он работает для высоты набора, что-то меньшее, чем принятый параметр высоты.