正如我一直在使用
classpath 'com.android.tools.build:gradle:+'
Run Code Online (Sandbox Code Playgroud)
在build.gradle文件中,由于gradle版本2.10已发布,因此出现以下错误.错误是:
警告:需要Gradle版本2.10.目前的版本是2.8.如果使用gradle包装器,请尝试将C:\ Users\blahblah\myproject\gradle\wrapper\gradle-wrapper.properties中的distributionUrl编辑为gradle-2.10-all.zip
起初它很容易被指南解决,但是当我完成更改后,我再次收到错误.
我正在使用Android Studio 2.0和最新的Android SDK Tools 24.4.1以及Android SDK Build Tools 23.0.2
我甚至尝试下载Gradle 2.10并将其手动放在android-studio\gradle \文件夹中,但没有运气.
任何帮助,将不胜感激.
我正在尝试使用Galaxy S4上的Camera2 API捕获图像数据.ImageReader被用作表面提供者.已使用ImageFormat.YV12和ImageFormat.YUV_420_888尝试使用的图像格式,并生成相同的结果.
设置似乎很好,我使用ImageReader从ImageReader获取一个图像.图像有3个平面.缓冲区是预期的大小,Y平面的宽度*高度和其他两个平面的(宽度*高度)/ 4.
问题是我没有以两种方式正确获取数据.第一个问题是Y平面数据是镜像.这可以处理,虽然很奇怪所以我很好奇,如果这是预期的.
更糟糕的问题是其他两架飞机似乎根本没有正确提供数据.例如,如果图像大小为640x480,导致U和V缓冲区大小为76800字节,则只有缓冲区的前320字节为非零值.此数字不同,似乎不遵循不同图像大小之间的设定比例,但似乎在每种尺寸的图像之间保持一致.
我想知道在使用这个API时是否有一些我遗漏的东西.代码如下.
public class OnboardCamera {
private final String TAG = "OnboardCamera";
int mWidth = 1280;
int mHeight = 720;
int mYSize = mWidth*mHeight;
int mUVSize = mYSize/4;
int mFrameSize = mYSize+(mUVSize*2);
//handler for the camera
private HandlerThread mCameraHandlerThread;
private Handler mCameraHandler;
//the size of the ImageReader determines the output from the camera.
private ImageReader mImageReader = ImageReader.newInstance(mWidth, mHeight, ImageFormat.YV12, 30);
private Surface mCameraRecieverSurface = mImageReader.getSurface();
{
mImageReader.setOnImageAvailableListener(mImageAvailListener, mCameraHandler);
}
private byte[] tempYbuffer = …Run Code Online (Sandbox Code Playgroud) 我想研究一下在Android和Renderscript上创建Renderscript脚本,在过去的一年里,Android-Studio成为Google支持Android应用开发的唯一IDE.
为此,我找到了多个网站,如下:
事实上,我见过的所有教程和示例都是针对Eclipse的,他们说我需要做的就是在"raw"文件夹中创建一个"rs"文件(也在"src"文件夹中尝试过, "MainActivity.java"文件的相同文件夹,它将为我自动生成所需的Java文件,前缀为"ScriptC_".
但它对我不起作用.
我已经从我发现的一些样本(对于Eclipse)创建了一个名为"julia.rs"的文件.这是代码:
#pragma version(1)
#pragma rs java_package_name(lb.com.myapplication)
float cx;
float cy;
float width;
float height;
float zoom;
int precision;
uchar *color;
void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {
float fx = (x + 0.5f) / width * (4.f / zoom) - (2.f / zoom);
float fy = (y + 0.5f) / height * (4.f / zoom) - (2.f / zoom);
float t = 0; …Run Code Online (Sandbox Code Playgroud) 首先问一个问题:在ImageReader知道我总是将捕获转换为 的情况下,初始化和使用camera2 api 的最有效方法是什么Bitmap?
我正在尝试 Android Camera2 示例,一切都运行得很好。然而,出于我的目的,我总是需要对捕获的静态图像执行一些后期处理,为此我需要一个Bitmap对象。目前我正在使用来自(我正在解释)的BitmapFactory.decodeByteArray(...)字节。ImageReader.acquireNextImage().getPlanes()[0].getBuffer()虽然这可以接受,但我仍然觉得应该有一种方法可以提高性能。捕获的内容被编码ImageFormat.Jpeg,需要再次解码才能得到Bitmap,这似乎是多余的。理想情况下,我会获取它们PixelFormat.RGB_888并使用将其复制到位图Bitmap.copyPixelsFromBuffer(...),但使用该格式初始化似乎并不ImageReader具有可靠的设备支持。YUV_420_888可能是另一种选择,但环顾四周,似乎需要跳过一些环节才能解码为Bitmap. 有推荐的方法吗?
我正在使用camera2 API来获取格式的图像流ImageFormat.YUV_420_888。我需要使用一个库对它们进行一些处理,该库需要将图像作为 RGB 字节数组发送(因此byte array length = width * height * 3)
我使用这个线程(也可能是所有其他线程)将图像转换为 RGB 字节数组(这似乎有效,至少结果字节数组是我需要的)。
另外,这是我在 Kotlin 中用于将 YUV_420 转换为 RGB 的确切代码,并进行了一些更新:https://gist.github.com/VictorMotogna/e7a8493af65be994f29f5508660dd4a9
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xe00000084 in tid 20776 (package name), pid 20776问题是几次尝试后转换崩溃并显示消息。
我尝试过其他图像格式、其他转换,但似乎没有任何效果 - 我要么遇到相同的崩溃(使用 YUV_420 或 NV21 时),要么无法获得正确的图像/转换。
似乎有帮助的一件事是:android:hardwareAccelerated="false"应用程序在运行次数比运行次数多得多后崩溃android:hardwareAccelerated="true"
有谁知道如何修理它?
我正在使用RenderScript和Allocation从Android Camera2 API获取YUV_420_888帧,但是一旦我从分配中复制byte [],我只从组成帧的3个平面接收Y平面,而U和V平面值在字节[]中设置为0.我试图模仿previos相机API中的onPreviewframe,以便在应用程序处理相机帧时执行.我的分配创建如下:
Type.Builder yuvTypeBuilderIn = new Type.Builder(rs, Element.YUV(rs));
yuvTypeBuilderIn.setX(dimensions.getWidth());
yuvTypeBuilderIn.setY(dimensions.getHeight());
yuvTypeBuilderIn.setYuvFormat(ImageFormat.YUV_420_888);
allocation = Allocation.createTyped(rs, yuvTypeBuilderIn.create(),
Allocation.USAGE_IO_INPUT | Allocation.USAGE_SCRIPT);
Run Code Online (Sandbox Code Playgroud)
而我的脚本看起来像:
#pragma version(1)
#pragma rs java_package_name(my_package)
#pragma rs_fp_relaxed
rs_allocation my_frame;
Run Code Online (Sandbox Code Playgroud) android yuv renderscript android-camera android-5.0-lollipop
我正在尝试将YUV_420_888图像转换为来自camera2预览的位图。但是输出图像的颜色不正确。
接下来是我正在运行的用于生成位图的测试代码。仅是测试代码,因此请不要对不相关的因素进行任何代码审查,例如,位图将被回收,或者将连续创建RenderScript。该代码仅用于测试从YUV到RGB的转换,仅此而已。
其他因素是,该代码应从API 22及更高版本运行,因此使用RenderScript特定的ScriptIntrinsicYuvToRGB应该足够,而不必使用旧的手动转换,由于缺乏适当的YUV_420_888支持,因此仅在以前的Android版本中才需要使用。
由于RenderScript已经提供了专用于处理所有类型的YUV转换的ScriptIntrinsicYuvToRGB,我认为问题可能出在如何从Image对象获取YUV字节数据,但我无法弄清楚问题出在哪里。
要在Android Studio中查看输出位图,请在bitmap.recycle()中放置一个断点,因此在回收之前,可以使用“查看位图”选项在“变量调试”窗口中对其进行查看。
请让我知道是否有人可以发现转换的问题:
@Override
public void onImageAvailable(ImageReader reader)
{
RenderScript rs = RenderScript.create(this.mContext);
final Image image = reader.acquireLatestImage();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer planeY = planes[0].getBuffer();
final ByteBuffer planeU = planes[1].getBuffer();
final ByteBuffer planeV = planes[2].getBuffer();
// Get the YUV planes data
final int Yb = planeY.rewind().remaining();
final int Ub = planeU.rewind().remaining();
final int Vb = planeV.rewind().remaining();
final ByteBuffer yuvData = ByteBuffer.allocateDirect(Yb + Ub + Vb);
planeY.get(yuvData.array(), 0, Yb);
planeU.get(yuvData.array(), Yb, …Run Code Online (Sandbox Code Playgroud) android ×7
renderscript ×3
yuv ×3
bitmap ×2
android-ndk ×1
eclipse ×1
gradle ×1
plugins ×1
rgb ×1