【问题标题】:Android getPixels安卓getPixels
【发布时间】:2012-07-24 22:10:48
【问题描述】:

我目前正在开发一个将边缘检测应用于预览帧区域的程序。我使用了 previewcallback 并得到了裁剪的位图,已使用以下方法转换为灰度。

int height1=120;
int width2=120;

            final Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 260, 15, 
                    width2, height1);
            try {
                int bWidth = resizedBitmap.getWidth();
                int bHeight = resizedBitmap.getHeight();
                int[] pixels = new int[bWidth * bHeight];
                resizedBitmap.getPixels(pixels, 0, bWidth, 0, 0, bWidth, bHeight);
                for (int y = 0; y < bHeight; y++){
                    for (int x = 0; x < bWidth; x++){
                        int index = y * bWidth + x;
                        int R = (pixels[index] >> 16) & 0xff;     //bitwise shifting
                        int G = (pixels[index] >> 8) & 0xff;
                        int B = pixels[index] & 0xff;
                        int gray = (int) (.299 * R + .587 * G + .114 * B);
                    }
                }

我对此很陌生,想知道 gray 是否是 120x120 像素的二维数组,或者 gray 的值是否只是在每个循环中被覆盖。

抱歉,如果这是非常基本的

【问题讨论】:

    标签: android indexing pixel grayscale


    【解决方案1】:

    好吧,也许我遗漏了一些东西,但据我所知,gray 已被覆盖。你需要类似的东西

    int[][] gray = new int[width][height];
    // start loop
    

    在循环中:

    gray[x][y] = ...;
    

    【讨论】:

    • 谢谢,我会试一试的。我正在努力使用 Android 进行调试,因为我不能只打印出数组。 (之前在 Matlab 上工作过)
    • Android 确实需要一种与使用 matlab 完全不同的思维方式,我感受到了你的痛苦。但是,要“打印”出数组和对象,请尝试 Log.d("MyAppName", myArray.toString());然后在 logcat 中查看打印出来的内容
    • 如果您使用 Eclipse,您还可以通过在表达式视图中放置断点并添加所需的值(也可以是数组)在运行时查看值。对我来说更方便,因为您还可以更改值以进行调试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2017-12-05
    • 2012-04-08
    • 2023-03-22
    • 2012-10-09
    • 2014-06-09
    相关资源
    最近更新 更多