Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在整数数组中存储位图_Java_Android_Image Processing_Bitmap - Fatal编程技术网

Java 在整数数组中存储位图

Java 在整数数组中存储位图,java,android,image-processing,bitmap,Java,Android,Image Processing,Bitmap,最好的方法是什么。我有一个长度为高度*宽度的数组。我是否简单地循环位图,根据循环索引将每个像素设置为数组?谢谢 [更新] 这是一个在位图上放置鱼眼失真的应用程序。我试图将像素数据存储在一个数组中,而不是调用Bitmap.setPixel(),因为这会带来巨大的GC开销 for (int j=0;j<dst.getHeight();j++) { for (int i=0;i<dst.getWidth();i++) { origPixel= in

最好的方法是什么。我有一个长度为高度*宽度的数组。我是否简单地循环位图,根据循环索引将每个像素设置为数组?谢谢

[更新] 这是一个在位图上放置鱼眼失真的应用程序。我试图将像素数据存储在一个数组中,而不是调用Bitmap.setPixel(),因为这会带来巨大的GC开销

 for (int j=0;j<dst.getHeight();j++) {
        for (int i=0;i<dst.getWidth();i++) {
            origPixel= input.getPixel(i,j);
            getRadXStart = System.currentTimeMillis();
            float x = getRadialX((float)j,(float)i,centerX,centerY,k);
            float y = getRadialY((float)j,(float)i,centerX,centerY,k);
            sampleImage(input,x,y);

            color = ((s[1]&0x0ff)<<16)|((s[2]&0x0ff)<<8)|(s[3]&0x0ff);
        //  System.out.print(i+" "+j+" \\");

            //if( Math.sqrt( Math.pow(i - centerX, 2) + ( Math.pow(j - centerY, 2) ) ) <= 150 ){
            if (Math.pow(i - centerX, 2) + ( Math.pow(j - centerY, 2) ) <= 22500 ) {
                // dst.setPixel(i, j, color);
                arr[i]=color;
            } else {
                //dst.setPixel(i,j,origPixel);
                arr[i]=origPixel;
            }
        }
    }

Bitmap dst2 = Bitmap.createBitmap(arr,width,height,input.getConfig());
        return dst2;

用于(int j=0;j你尝试过这个方法吗?

要填充它,你必须在位图中循环设置每个像素。也就是说,我不知道你是否会看到显著的性能提高。

示例代码显示了什么?你在哪里设置像素?嗨,我想你错过了我的更新。位图中的set/getPixel带有一个大的GC over头部。转换图像大约需要50秒。这是由于执行了gc。我已经运行了traceview,需要避免的是位图集/getPixel。我不是说getPixel(…)的方法,我是说getPixels(…)(注意“s”)将所有像素颜色数据加载到int[]。这不是你想要的吗?你说的GC开销在哪里?啊,很抱歉没有抓住你的重点。是的,我会试试看,因为只有调用位图类。谢谢,实际上我不认为我可以使用它,因为我需要循环通过位图来应用效果。这是目标位图中像素的设置,不支持他使用setPixel()增加了开销。如果我可以将像素数据写入数组,而不是调用tp bitmap setPixel,那么应用程序将加快速度。我只需将数组传递给位图静态createBitmap()@Happhard hi,为什么是3个数组?每个像素的颜色不是存储为int值吗?@Happhard方法samleImage在扭曲图像方面起到了一定作用,并且没有对位图设置器/获取器进行太多调用。我认为正是这些调用影响GC。该应用程序运行良好,除了显示位图时,我认为只有最上面一行的像素是图中显示的位图的其余部分是黑色的。我想这是我如何将像素输入到数组或循环中prob@turtleboyGC仅在创建对象然后取消引用时才被调用。假设位图对象实际存储为一组整数,则它有效地执行了您希望对数组执行的操作。@Happhard嗨,我已经找到了通过使用该阵列,我认为dst.setPixel会依次调用或检查许多其他内容。我观看了一段谷歌视频,其中描述了位图在本机层上的存储方式以及所涉及的开销。我正在使用覆盖效果,它需要tweeking,让应用程序在6秒内处理位图,我想我会更新的,谢谢