我试图让它,使一个像素在图像中的位置(inti,intj)决定该像素的颜色。这是一个java2d游戏中的爆炸效果,我想让爆炸的颜色取决于爆炸的位置,从而变得格外酷。我目前正在做的是创建一个颜色的ArrayList
,然后使用I*j
作为索引,在一张1000x1000的图像上进行测试,显示沿对角线的镜像,这自然是因为I*j=j*I
围绕对角线,如下所示。
知道i=0, j=999
是第1000个像素,而i=999, j=0
是第999001个像素,你如何得到一个映射f(i, j)!=f(j, i)
像素到颜色,而不首先将颜色存储在列表中?颜色排序非常重要,也就是说,颜色是使用R,0,0
然后0,G,0
然后0,0,B
构建的
问题显然不清楚。注意GetAllColor
,它按顺序创建颜色并将其添加到列表中,注意g2d。setColor(i*j)
,它按顺序设置颜色,除了沿对角线镜像。我想知道我是否可以将颜色映射到索引(按顺序),而无需将其存储在列表中,同时避免沿对角线进行镜像。
全MCVE
public class AllColors extends JPanel {
private int width, height;
private double colorIncrement;
private List<Color> colors;
public AllColors(int width, int height) {
this.width = width;
this.height = height;
this.colorIncrement = 1.0 / Math.pow(1.0 * width * height, 1.0 / 3);
this.colors = new ArrayList<>(width * height);
getAllColors();
}
@Override
@Transient
public Color getBackground() {
return Color.black;
}
@Override
@Transient
public Dimension getPreferredSize() {
return new Dimension(width, height);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
// Notice i*j= j*i around diagonal, the problem
g2d.setColor(colors.get(i * j));
g2d.fillRect(i, j, 1, 1);
}
}
}
private void getAllColors() {
for (float R = 0; R < 1.0; R += colorIncrement)
for (float G = 0; G < 1.0; G += colorIncrement)
for (float B = 0; B < 1.0; B += colorIncrement)
colors.add(new Color(R, G, B));
}
public static void main(String[] args) {
JFrame frame = new JFrame();
AllColors allColors = new AllColors(800, 800);
frame.getContentPane().add(allColors);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
}
知道i=0,j=999
是第1000个像素,而i=999,j=0
是第999001个像素,如何获得映射f(i,j)!=f(j,i)
将像素转换为颜色,而不首先将颜色存储在列表中?
pixel = i * 1000 + j + 1;
至于将它们存储在列表中,这可能是最好的方法,因为预先计算通常可以使事情更快。虽然我可能会做一个二维数组。比如:
private void getAllColors() {
colors = new Color[1000][1000];
int i = 0; int j = 0;
loop:
for (float R = 0; R < 1.0; R += colorIncrement) {
for (float G = 0; G < 1.0; G += colorIncrement) {
for (float B = 0; B < 1.0; B += colorIncrement) {
colors[i++][j] = new Color(R, G, B));
if (i == 1000) {
j++;
i = 0;
if (j == 1000) break loop;
}
}
}
}
}
在双回路检查中,当i=j时,跳过有效载荷。
问题内容: 例如 输入:[‘A’,’Z’,’F’,’D’,…] 输出:[0,25,5,3,…] 在C语言中,我只是从’A’中减去char,但是我似乎无法在Java中做到这一点。 问题答案: 您也可以在Java中使用char进行简单的数学运算: 将输出0。
假设我有一个包含一些对象的数组。 出于好奇,是否可以将流映射到它们在原始数组中的位置?例如,在这种情况下将其映射到1,2,3,4? 我想这样的事情是行不通的。
主要内容:DocumentRoot,DocumentRoot之外的文件,用户目录,URL重定向,反向代理,重写引擎,文件未找到本文将介绍Apache HTTP Server如何使用请求的URL来确定从中提供文件的文件系统位置。 DocumentRoot 在决定为给定请求提供什么文件时,httpd的默认行为是获取请求的URL-Path(主机名和端口后面的URL部分),并将其添加到配置文件中指定的的末尾。因此,下面的文件和目录构成了可从Web上看到的基本文档树。 例如,如果设置为时,则对的请求会将文
问题内容: 我在一个开始从事的项目中遇到了这段代码。原始开发人员不再可用,我对此一无所知: 产生值为。这是如何运作的? 什么是运算符? 什么是运算符? 什么是运算符? 什么是运算符? 问题答案: 什么是运算符? 那是两个运算符,一个是赋值运算符,一个是一元加号,它什么都不做。 您是否输入错了并表示compund赋值运算符? 什么是运算符? 还有两个运算符,一个为后递增,一个为加法(根据最大划分规则
我在这里尝试遵循本指南: https://github . com/Spring-projects/Spring-Boot/wiki/Spring-Boot-Configuration-Binding 但是我正在努力让它工作。 我想从 application.yml 中定义的映射初始化哈希映射。 这是我最后一次尝试yml-map定义: 这是我的java类: 我想将“组合”和注入为键,并将值注入为字
问题内容: 我有一个Android应用程序,可将图像加载为位图并将其显示在ImageView中。问题在于图像似乎具有透明背景;这会导致图像上的某些黑色文本在黑色背景下消失。 如果将ImageView背景设置为白色,则可以完成这种工作,但是在图像上会出现丑陋的大边框,将其拉伸以适合父对象(实际图像在中间缩放)。 所以-我想将位图中的透明像素转换为纯色-但我不知道该怎么做! 任何帮助将不胜感激!