我正在尝试学习如何在android中制作一个动画精灵,并且无法弄清楚如何组织我的位图.我有一个我的角色的精灵表向右走:一个五位副本的位图,在一个步行循环中等间距(每45px).
我计划通过以下方式一次绘制我的精灵表位图的一小部分来绘制每个帧:
Rect sourceRect = new Rect(0, 0, 45, 75);
canvas.drawBitmap(spriteSheetBitmap, sourceRect, new Rect(0, 0, 45, 75), null);
Run Code Online (Sandbox Code Playgroud)
然后对于下一帧,将"sourceRect.x"递增45,然后重绘,依此类推.
但是,我现在还不确定如何让我的精灵走向左边.我原本以为我可以只镜像我正在绘制的矩形以获得翻转图片.就像是:
sourceRect = new Rect(45, 0, 0, 75);
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用(不确定这里实际发生了什么,但没有任何东西被吸引到我的表面).
在线搜索,似乎我应该复制我的原始位图,用变换矩阵镜像它,然后在向左走时使用该位图进行绘制.但是我也发现了一些实现,其中许多较小的位图对象是从原始精灵表中创建的,存储(并为镜像运动转换),然后根据需要使用.
所以我想知道在这种情况下最好的是什么,或者确实存在任何差异(性能/内存):
方法1:加载我的原始精灵表,制作一个新的位图实例,镜像它,然后计算所有的矩形并使用那些+两个整张纸来绘制(诚然,有一些额外的位图空间,其中未使用精灵表) .
方法2:在我的原始精灵表中加载,为每个帧创建一个新的两个位图对象(1个镜像,1个正常)并存储要从中绘制的对象.
方法3:其他更好的方法?
我的视频相机应用程序以横向模式进行录制,但前置摄像头预览常规图像,但实际录制在轴上进行镜像(翻转或反转).
在普通后置摄像头上一切都很好用.
任何人都可以建议我避免它吗?任何建议或源代码都会有很大帮助.谢谢.
我使用MediaRecorder录制视频。使用后置摄像头时,它可以正常工作,但是使用前置摄像头时,捕获的视频被翻转/反转。这意味着右侧的项目将出现在左侧。摄像头预览可以正常工作,只是最终捕获的视频翻转了。
这是相机预览的样子
但是最终的视频看起来像这样(所有项目都出现在左侧,出现在右侧)
到目前为止我尝试过的是:
我尝试使用“ matrix准备记录器”,但似乎并没有改变。
private boolean prepareRecorder(int cameraId){
//# Create a new instance of MediaRecorder
mRecorder = new MediaRecorder();
setCameraDisplayOrientation(this,cameraId,mCamera);
int angle = getVideoOrientationAngle(this,cameraId);
mRecorder.setOrientationHint(angle);
if(cameraId == Camera.CameraInfo.CAMERA_FACING_FRONT){
Matrix matrix = new Matrix();
matrix.preScale(1.0f,-1.0f);
}
//all other code to prepare recorder here
}
Run Code Online (Sandbox Code Playgroud)
我已经在下面阅读了所有此问题,但似乎所有这些SurfaceView都未能解决我的问题。有关信息,我使用的是相机预览,所以这里的问题无济于事。
所以我的问题是:
1)如何通过前置摄像头捕获视频,而不是反向视频(与摄像头预览完全相同)?
2)如何在SurfaceView不使用相机预览的情况下实现此目的TextureView?(因为我上面提到的所有问题,告诉有关使用TextureView)
欢迎所有可能的解决方案..Tq
编辑
我制作了2个简短的视频片段以阐明问题,请下载并查看