在几个教程和示例之后,我提出了将相机焦点设置在特定位置的下一个算法,问题是相机完全忽略了光点并执行了正常的整体焦点而不是我指定的矩形区域.我在算法中还缺少什么?这已经在Android 4.0及更高版本的几部手机上进行了测试,因此这些设备支持焦点区域API.请注意,我正在编写的应用程序仅在横向模式下工作.
@Override
public boolean onTouchEvent(final MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_UP)
{
float x = event.getX();
float y = event.getY();
float touchMajor = event.getTouchMajor();
float touchMinor = event.getTouchMinor();
Rect touchRect = new Rect((int)(x - touchMajor / 2), (int)(y - touchMinor / 2), (int)(x + touchMajor / 2), (int)(y + touchMinor / 2));
this.submitFocusAreaRect(touchRect);
}
}
private void submitFocusAreaRect(final Rect touchRect)
{
Camera.Parameters cameraParameters = camera.getParameters();
if (cameraParameters.getMaxNumFocusAreas() == 0)
{
return;
}
// Convert from View's width and …Run Code Online (Sandbox Code Playgroud) 是glTexImage2D和glTexSubImage2D像素的缓冲区传递到纹理的唯一途径?
目前我在设置函数glTexImage2D中使用null作为缓冲区,然后在渲染循环中,我在每次迭代时使用新的缓冲区数据调用glTexSubImage2D.
但是知道纹理不会改变任何属性(如尺寸),是否有更有效的方法将实际像素数据传递给渲染纹理?
由于getExternalStoragePublicDirectory已在中弃用Android Q,建议使用其他方式。那么我们如何指定我们要将相机应用程序生成的照片存储到DCIM文件夹或文件夹中的自定义子文件夹中DCIM呢?
文档指出,接下来的3个选项是新的首选替代品:
选项1不存在,因为这意味着如果卸载该应用程序,照片将被删除。
选项3也不是一个选择,因为它将要求用户通过SAF文件浏览器选择位置。
我们只剩下选项2,即MediaStore;但是没有文档说明如何使用它代替Android Q中的getExternalStoragePublicDirectory。
我正在尝试编写一个紧凑而简单的噪声功能,严格限制FP16.这是什么,我就出来了,到目前为止,但我觉得某处操作的数量变得太小FRACT或罪,因为在GPU,我必须写这篇文章,这些都是内FP16限制.关于我做错什么的任何想法?顺便说一句,我不能使用时间变量,也不能使用样本噪声纹理.我需要正确的功能必须紧凑,小巧且自给自足,并产生简单的颗粒噪声效果.注意:下一个算法适用于任何桌面GPU卡,但在" MALI 400 MP "GPU 上完全失败,因为这个浮点值具有FP16限制.
vec3 noise(vec3 color)
{
float variation = length(color);
float dot_product = dot(variation, -0.577350269);
float sin_result = sin(dot_product) * 1.19245;
float random = fract(sin_result);
return color + vec3(random);
}
Run Code Online (Sandbox Code Playgroud)
如果任何人可以为GLSL-ES推荐任何其他随机功能,但严格遵守FP16限制,也会很棒.我知道其他随机实现,例如单纯形噪声,但是这些对于我需要做的事情来说太大而且速度太慢.因此Perlin和Simplex噪声算法不是一种选择.
我正在尝试根据联系电话号码检索联系人姓名.我做了一个应该适用于所有API版本的功能,我不能让它在1.6中工作,我看不出问题,也许有人可以发现它?
请注意,我已经替换了字符串的API常量,因此我没有弃用的警告问题.
public String getContactName(final String phoneNumber)
{
Uri uri;
String[] projection;
if (Build.VERSION.SDK_INT >= 5)
{
uri = Uri.parse("content://com.android.contacts/phone_lookup");
projection = new String[] { "display_name" };
}
else
{
uri = Uri.parse("content://contacts/phones/filter");
projection = new String[] { "name" };
}
uri = Uri.withAppendedPath(uri, Uri.encode(phoneNumber));
Cursor cursor = this.getContentResolver().query(uri, projection, null, null, null);
String contactName = "";
if (cursor.moveToFirst())
{
contactName = cursor.getString(0);
}
cursor.close();
cursor = null;
return contactName;
}
Run Code Online (Sandbox Code Playgroud) 给定下一个顶点着色器,颠倒翻转坐标的最简单,最有效和最快的方法是什么,因此片段着色器将产生和颠倒图像?
attribute vec4 a_position;
attribute vec2 a_texcoord;
varying vec2 v_texcoord;
void main()
{
v_texcoord = a_texcoord.st;
gl_Position = a_position;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个将视频摄像机帧写入四边形的程序.我看到教程解释说使用framebuffers可以更快,但仍然学习如何做到这一点.但是除了帧缓冲之外,我发现还有渲染缓冲区.
问题是,如果目的只是将纹理写入将填满屏幕的四边形,我真的需要一个渲染缓冲区吗?
我知道渲染缓冲区用于深度测试,我认为它只用于检查像素的Z位置,因此为我的场景创建渲染缓冲区是愚蠢的,对吗?
我正在努力让下一个简单的算法在三星Galaxy SIII中运行
float rand(vec2 co)
{
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}
....
vec3 color = texture2D(u_texture, v_texcoord);
gl_FragColor.rgb = color + vec3(rand(gl_FragCoord.xy + time / 1000.0));
....
Run Code Online (Sandbox Code Playgroud)
该代码完美地生成了三星Galaxy S1和谷歌Nexus S的预期噪音.但它完全失败了使用ARM的Mali-400/MP4的新智能手机.
任何人都可以发现这个算法有什么问题?或者也许明白为什么会失败?
可能重复:
如何快速进行alpha混合?
alpha混合2种RGBA(整数)颜色的最快方法是什么?
作为注释,目标颜色混合的位置始终是不透明的,只有第二种颜色可以具有不同的透明度.
我试图在C中找到最快的方法,考虑到混合的最终结果颜色必须最终没有透明度,完全不透明(alpha = 0xff)
我正在尝试调整(缩小)YUV420sp格式的图像.是否可以在不将其转换为RGB的情况下进行此类图像调整,从而直接操作YUV420sp像素阵列?我在哪里可以找到这样的算法?
谢谢