当前位置: 首页 > news >正文

记录PC端处理图片颜色翻转的java、JNA、JNI处理耗时情况

默认情况下未指定编译优化参数,处理器i7-4360.

图片选用尽量大的一张4K图片。

实验结果 *java :23   JNA :302                     JNI :206

差异很大,估计java编译器根据循环长度启动了JIT,可能也优化拆分了for循环

java :26
c :640
c :239

//24,309,175ms
    public static void main(String[] args) {
        String path = "C:\\Users\\Administrator\\Pictures\\est\\4k.jpg";
        try {
            BufferedImage img = ImageIO.read(new File(path));
            Raster r = img.getData();
            System.out.println(r.getWidth() + "," + r.getHeight());
            int w = r.getWidth(), h = r.getHeight();
            int[] data = new int[w * h];
            img.getRGB(0, 0, w, h, data, 0, w);
            
            long s = System.currentTimeMillis();
            rsv(data);
            long e = System.currentTimeMillis();
            System.out.println("java :" + (e - s));
            BufferedImage bf = new BufferedImage(w, h, BufferedImage.TYPE_INT_BGR);
            bf.setRGB(0, 0, w, h, data, 0, w);
            OutputStream output = new FileOutputStream(path.substring(0, path.lastIndexOf(".")) + "_2.jpg");
            ImageIO.write(bf, "jpg", output);

//            System.setProperty("jna.debug_load", "true");
            
             s = System.currentTimeMillis();
            ImgRsv.instance.nrsv(data, data.length);
             e = System.currentTimeMillis();
            System.out.println("c :" + (e - s));

            bf.setRGB(0, 0, w, h, data, 0, w);
             output = new FileOutputStream(path.substring(0, path.lastIndexOf(".")) + "_jna.jpg");
            ImageIO.write(bf, "jpg", output);
            
            
            
             s = System.currentTimeMillis();
            TJNI.rsv(data);
             e = System.currentTimeMillis();
            System.out.println("c :" + (e - s));

            bf.setRGB(0, 0, w, h, data, 0, w);
             output = new FileOutputStream(path.substring(0, path.lastIndexOf(".")) + "_jni.jpg");
            ImageIO.write(bf, "jpg", output);
            
            

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void rsv(int[] data) {
        for (int i = 0; i < data.length; i++) {
            int r = 255 - (data[i] >> 16 & 0xff);
            int g = 255 - (data[i] >> 8 & 0xff);
            int b = 255 - (data[i] & 0xff);
            data[i] = r << 16 | g << 8 | b;
        }
    }


    public interface ImgRsv extends Library{
        ImgRsv instance=(ImgRsv) Native.loadLibrary("src/img/t1/tc.dll",ImgRsv.class);
        void nrsv(int[] data,int len);
    }
    


http://www.mrgr.cn/news/36849.html

相关文章:

  • 深度拆解:如何在Facebook上做跨境电商?
  • TinyWebSever项目面试题整理
  • 曦烽盛启——丰宁坝上草原大拍暨曦烽摄影学院十五周年庆典活动
  • 2025年第十三届生物信息学与计算生物学国际会议(ICBCB 2025)即将召开!
  • 文件防泄密软件有哪些|5款简单易操作软件有效防止文件泄密!
  • 美客多在巴西疯狂扩张,支持时尚和超市品类增长,美客多怎么上传产品?
  • vue 中获取数值但是只获取到了 Promise 属性,获取不到其中的值
  • 传递正能量
  • AWS Network Firewall - 配置只应许白名单域名出入站
  • MySQL数据库进阶知识(五)《锁》
  • JVM 基本组成
  • 【工具分享】Onyx2勒索病毒解密工具
  • GO Message Bus
  • 希捷电脑硬盘好恢复数据吗?探讨可能性、方法以及注意事项
  • 生物技术新突破:DAP-seq技术在非模式物种中的应用
  • linux-自动化构建工具与进度条程序的实现
  • 常用CSS选择器
  • Altium Designer创建接口类器件原理图库
  • docker笔记_数据卷、挂载
  • Goweb---Gorm操作数据库(三) 更新