如何实现摄像全屏以及修改后的影响

如何实现摄像全屏以及修改后的影响

摄像时候,不能全屏,上下或者左右有黑边。

发生此现象的原因:

预览大小是由设置的preview size决定的,摄像时的preview size必须跟video size同比例,否则预览或者录制出来的视频会有拉伸现象。

当录制16:9的video,预览区域就是16:9;当录制4:3的video,显示的区域就是4:3.

当屏幕分辨率(如果有虚拟按键需要除去虚拟按键占用的空间)跟video size不是同比例时,就会有黑边情况发生。

由于videosize是不建议更改的,因为480P/720P/1080P对应的video size是多少都是有规范的。

如果一定要实现摄像时候全屏,目前只有一种方式,就是将显示的区域同比放大实现全屏。但是放大之后,显示区域就会超出屏幕,

所以会有所见非所得的现象,录制出来的视频跟预览时候看到的视角有不同。

如果能接收如上的影响,可以根据下面的方法实现摄像全屏。

1. PreviewFrameLayout.java (alps\packages\apps\camera\src\com\android\camera\ui)

1) 添加变量

private boolean isVideoMode=false;

2) 添加方法

public void setCurrentMode(boolean videoMode) {

Log.d(TAG, "setCurrentMode isVideoMode=" + videoMode );

isVideoMode=videoMode;

}

3) 修改public void setAspectRatio(double ratio)方法

if (mAspectRatio != ratio) {

mAspectRatio = ratio;

requestLayout();

}

修改为:

if(isVideoMode)

{

mAspectRatio = ratio;

requestLayout();

}

else

{

if (mAspectRatio != ratio) {

mAspectRatio = ratio;

requestLayout();

}

}

4) protected void onMeasure(int widthSpec, int heightSpec)方法中

if (longSide > shortSide * mAspectRatio) {

longSide = Math.round((float)(shortSide * mAspectRatio) / 2) * 2;

} else {

shortSide = Math.round((float)(longSide / mAspectRatio) / 2) * 2;

}

修改为:

if(isVideoMode)

{

if (longSide > shortSide * mAspectRatio) {

shortSide = Math.round((float)(longSide / mAspectRatio) / 2) * 2;

} else {

longSide = Math.round((float)(shortSide * mAspectRatio) / 2) * 2;

}

}

else{

if (longSide > shortSide * mAspectRatio) {

longSide = Math.round((float)(shortSide * mAspectRatio) / 2) * 2;

} else {

shortSide = Math.round((float)(longSide / mAspectRatio) / 2) * 2;

}

}

2. Camera.java (alps\packages\apps\camera\src\com\android\camera)

private void setPreviewFrameLayoutAspectRatio()方法中:

mPreviewFrameLayout.setAspectRatio((double) width / height);

之前添加:

mPreviewFrameLayout.setCurrentMode(isVideoMode());

3. PositionController.java (alps\packages\apps\gallery2\src\com\android\gallery3d\ui)

添加方法:

public boolean isFullScreenCenter() {

Box b = mBoxes.get(0);

return (mPlatform.mCurrentX <= 50 && mPlatform.mCurrentX >= -50) && (b.mCurrentY <= 63 && b.mCurrentY >= -63);

}

4. PhotoView.java (alps\packages\apps\gallery2\src\com\android\gallery3d\ui)

protected void render(GLCanvas canvas)方法中:

boolean center = mPositionController.isCenter();

修改为:

boolean center = mPositionController.isFullScreenCenter();

相关风雨

“崴脚”那些事!
bt365手机投注

“崴脚”那些事!

🌊 07-05 💨 阅读 5952
“崴脚”那些事!
bt365手机投注

“崴脚”那些事!

🌊 07-05 💨 阅读 5952