jjzjj

java - 如何在Java中为折线图生成不同颜色的相同亮度?

coder 2024-03-21 原文

我想为我的折线图生成不同的颜色:

  • 我想生成同样不同的颜色(用于人眼)
  • 我希望它们具有相同的亮度(不是计算的亮度)

(这排除了RGB和HSL,YIQ接近但亮度不完全均匀)

您是否使用过任何库(在 Java 中)来处理统一配色方案的生成?

我已经在这个问题上花了几天时间,所以我希望你们中的一些人有同样的问题并解决了它。

谢谢!

编辑:不幸的是,我不能在 AppEngine 上使用 java.awt 包(或任何使用 java.awt.Color 的东西)。

最佳答案

这是我刚刚通过查看 Wikipedia 页面 http://en.wikipedia.org/wiki/SRGB_color_space 编写的一个小函数

private int makeARGB(double Y, double x, double y) {
  // Out of gamut colour
  int rgb = 0xFF808080;
  double X = Y * x / y;
  double Z = Y * (1 - x - y) / y;
  double rlin = +3.2046 * X + -1.5372 * Y + -0.4986 * Z;
  double r = gamma(rlin);
  int ir = (int) (r * 255.0);
  if (ir >= 0 && ir < 256) {
    double glin = -0.9689 * X + +1.8758 * Y + +0.0415 * Z;
    double g = gamma(glin);
    int ig = (int) (g * 255.0);
    if (ig >= 0 && ig < 256) {
      double blin = +0.0557 * X + -0.2040 * Y + +1.0570 * Z;
      double b = gamma(blin);
      int ib = (int) (b * 255.0);
      if (ib >= 0 && ib < 256) {
        rgb = 0xFF000000 + (ir << 16) + (ig << 8) + (ib << 0);
      }
    }
  }
  return rgb;
}
private double gamma(double l) {
  if (l < 0.0031308) {
    return l * 12.92;
  } else {
    return 1.055 * Math.pow(l, 1.0 / 2.4) - 0.055;
  }
}
private BufferedImage createImage() {
    BufferedImage bm = new BufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
    for (int ix = 0; ix < bm.getWidth(); ++ix) {
        double astar = ((double) ix) / ((double) bm.getWidth());
        for (int iy = 1; iy < bm.getHeight(); ++iy) {
            double bstar = ((double) iy) / ((double) bm.getHeight());
            int rgb = makeARGB(0.3, astar, bstar);
            bm.setRGB(ix, iy, rgb);
        }

    }
    return bm;
}

您传入亮度 Y 和颜色坐标 x,y。 x 和 y 名义上从 0..1 开始,但很多“空间”不在 sRGB 色域中,因此不对应于可显示的颜色。 Y 也是 0..1,先试试 0.3..0.5。

示例图片:

我对谷歌应用引擎一无所知,但 ARGB 整数是您需要的那种颜色规范吗?

关于java - 如何在Java中为折线图生成不同颜色的相同亮度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849174/

有关java - 如何在Java中为折线图生成不同颜色的相同亮度?的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  6. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  7. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  8. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  9. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  10. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

随机推荐