我创建了一个简单的JavaFX图像编辑器。有两个ImageView实例(对于原始图像,打开一个,对于已编辑图像,打开一个)。

一种方法将WritableImage转换为灰度。

问题是,转换所需的时间大约是Swing执行相同任务所需时间的两倍。知道为什么吗?@FXML

void loadImage(ActionEvent event) {

FileChooser fileChooser = new FileChooser();

File file = fileChooser.showOpenDialog(Main.primaryStage);

if (file != null) {

Image image = new Image("file:" + file.getAbsolutePath());

imViewOrig.setImage(image);

PixelReader pr = imViewOrig.getImage().getPixelReader();

WritableImage wi = new WritableImage(

pr,

(int)imViewOrig.getImage().getWidth(),

(int)imViewOrig.getImage().getHeight());

imViewEdit.setImage(wi);

}

}

@FXML

void greyscale(ActionEvent event) {

PixelReader pr = imViewOrig.getImage().getPixelReader();

PixelWriter pw = ((WritableImage)imViewEdit.getImage()).getPixelWriter();

long beginTime = System.currentTimeMillis();

for (int x = 0; x < imViewEdit.getImage().getWidth(); x++) {

for (int y = 0; y < imViewEdit.getImage().getHeight(); y++) {

Color c = pr.getColor(x, y);

double avg = (c.getRed() + c.getGreen() + c.getBlue()) / 3.;

Color grey = new Color(avg, avg, avg, c.getOpacity());

pw.setColor(x, y, grey);

}

}

System.out.println(System.currentTimeMillis() - beginTime + "ms");

}

秋千代码:

public void greyscale() {

long beginTime = System.currentTimeMillis();

for (int x = 0; x < image.getWidth(); x++) {

for (int y = 0; y < image.getHeight(); y++) {

Color c = new Color(image.getRGB(x, y));

int avg = (c.getRed() + c.getGreen() + c.getBlue()) / 3;

Color grey = new Color(avg, avg, avg);

image.setRGB(x, y, grey.getRGB());

}

}

repaint();

System.out.println(System.currentTimeMillis() - beginTime + "ms");

}

最佳答案

在快速测试中,如果仅执行int计算而不是操纵Color对象,则它的工作速度将提高10倍左右。与AWT Color类相比,JavaFX Color类的实现要丰富得多。我想这要付出额外的开销。int width = (int)image.getWidth();

int height = (int)image.getHeight();

int[] pixels = new int[width * height];

WritablePixelFormat pixelFormat = PixelFormat.getIntArgbPreInstance();

pr.getPixels(0, 0, width, height, pixelFormat, pixels, 0, width);

int[] newPixels = new int[pixels.length];

for (int i = 0 ; i < pixels.length; i++) {

int c = pixels[i];

int a = c & 0xFF000000 ;

int r = (c >> 16) & 0xFF ;

int g = (c >> 8) & 0xFF ;

int b = c & 0xFF ;

int gray = (r+g+b) / 3 ;

newPixels[i] = a | (gray << 16) | (gray << 8) | gray ;

}

pw.setPixels(0, 0, width, height, pixelFormat, newPixels, 0, width);

java pixel data_java - JavaFX PixelWriter性能低下相关推荐

  1. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  2. java程序能转变为javafx_如何将intellij中的普通Java项目转换为JavaFx项目

    小编典典 没有什么可以转换的. 我认为"正常" Java项目和JavaFX项目之间在Idea中没有任何区别. 当然,在Idea 12.x +中,可以使用向导创建新的JavaFX项目 ...

  3. MySQL查询中LIMIT的大offset导致性能低下浅析

    这篇文章主要给大家介绍了关于MySQL查询中LIMIT的大offset导致性能低下的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起 ...

  4. java split()方法_Java编程性能优化一些事儿

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about the t ...

  5. Java 编程:如何提高性能?(简单总结篇)

    2019独角兽企业重金招聘Python工程师标准>>> 开发者在编程中除了要有编程规范,还要注意性能,在 Java 编程中有什么提高性能的好办法呢? 本文转自国内 ITOM 行业领军 ...

  6. 在Java里面使用instanceof的性能影响

    问题:在Java里面使用instanceof的性能影响 我正在写一个应用程序,其中一种设计方案包含了instanceof操作的大量使用.虽然我知道面向对象设计通常试图避免使用instanceof,但那 ...

  7. benchmark问题_使用U盘来掩盖CEPH IO性能低下的问题

    背景 最近Gemfield利用团队废弃的硬件搭建了一个CEPH集群,这些硬件的关键信息如下: 主流的Intel x86 cpu: 64GB RAM per node: 1GbE+ NIC: 1GbE+ ...

  8. 品味性能之道十一:JAVA中switch和if性能比较

    通常而言大家普遍的认知里switch case的效率高于if else.根据我的理解而言switch的查找类似于二叉树,if则是线性查找.按照此逻辑推理对于对比条件数目大于3时switch更优,并且对 ...

  9. JAVA的字符串拼接与性能

    概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大.不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码测试. ...

最新文章

  1. bzoj 1877: [SDOI2009]晨跑 (网络流)
  2. 推荐一款Python开源库,技术人必备的造数据神器!
  3. spring security3 统计在线用户
  4. jeecg 3.5.2 新版本4种首页风格 【经典风格,shortcut风格,ACE bootstrap风格,云桌面风格】
  5. Web调试工具:火狐Firefox插件Firebug介绍
  6. Hive函数:GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
  7. java锁的概念,Java ReentrantLock锁机制概念篇
  8. 李菲菲贡献_贡献,贡献,贡献!
  9. php 打包下载网络图片,php多张图片打包下载
  10. 超级简洁的xml解析框架:TBXML
  11. Html5+Css3小试牛刀
  12. JAVA CLASS混淆工具:Allatori 简单试用
  13. 壁纸小程序云开发+无限裂变+附安装视频教程
  14. 黑马程序员与兄弟连兄弟会的对比
  15. 遇到svn is already locked 解决办法
  16. 如何玩转阿里巴巴国际站Trueview视频?
  17. aardio 模拟键盘按键,实现msgbox对话框自动关闭
  18. onvif 客服端鉴权
  19. Matlab之误差分析
  20. MATLAB动画绘制

热门文章

  1. 编程数学(A-2)-次方
  2. 库存管理与订单的控制
  3. POJ 1050 To the Max (最大子矩阵和)
  4. [转载] 民兵葛二蛋——第31集
  5. 用MFC消息映射机制自定义消息
  6. SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易
  7. [转载] python随笔2(列表的增删改查)
  8. [转载] python查看的统计量_python 描述性统计_Python中的基本统计:描述性统计
  9. FPGA开发设计必经之路:时序分析
  10. 第一天学习笔记之数组(冒泡排序+二分查找)