-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
375 additions
and
8 deletions.
There are no files selected for viewing
41 changes: 41 additions & 0 deletions
41
src/main/java/fr/dams4k/cpsmod/core/colorchooser/ColorChooserFrame.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package fr.dams4k.cpsmod.core.colorchooser; | ||
|
||
import java.awt.Dimension; | ||
|
||
import javax.swing.BoxLayout; | ||
import javax.swing.JFrame; | ||
import javax.swing.JPanel; | ||
|
||
import fr.dams4k.cpsmod.core.colorchooser.selectors.HColorSelector; | ||
import fr.dams4k.cpsmod.core.colorchooser.selectors.SBColorSelector; | ||
import fr.dams4k.cpsmod.core.colorchooser.sliders.SlidersContainer; | ||
|
||
public class ColorChooserFrame extends JFrame { | ||
public ColorChooserFrame() { | ||
JPanel mainPanel = new JPanel(); | ||
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); | ||
|
||
JPanel colorWheelPanel = new JPanel(); | ||
colorWheelPanel.setLayout(new BoxLayout(colorWheelPanel, BoxLayout.X_AXIS)); | ||
|
||
SBColorSelector sbColorSelector = new SBColorSelector(ImageGenerators.sbColorSelector(0f)); | ||
HColorSelector hColorSelector = new HColorSelector(ImageGenerators.hColorSelector(), sbColorSelector, 0f); | ||
colorWheelPanel.add(sbColorSelector); | ||
colorWheelPanel.add(hColorSelector); | ||
|
||
JPanel colorSliders = new SlidersContainer(); | ||
|
||
mainPanel.add(colorWheelPanel); | ||
mainPanel.add(colorSliders); | ||
|
||
add(mainPanel); | ||
|
||
setSize(new Dimension(326, 400)); | ||
setMinimumSize(new Dimension(326, 400)); | ||
setLocationRelativeTo(null); | ||
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); | ||
setTitle("Color Chooser"); | ||
setVisible(true); | ||
} | ||
|
||
} |
36 changes: 36 additions & 0 deletions
36
src/main/java/fr/dams4k/cpsmod/core/colorchooser/ImageGenerators.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package fr.dams4k.cpsmod.core.colorchooser; | ||
|
||
import java.awt.Color; | ||
import java.awt.image.BufferedImage; | ||
|
||
public class ImageGenerators { | ||
public static BufferedImage sbColorSelector(float h) { | ||
int size_x = 255; | ||
int size_y = 255; | ||
BufferedImage imageOut = new BufferedImage(size_x, size_y, BufferedImage.TYPE_INT_RGB); | ||
|
||
for (int y = 0; y < size_y; y++) { | ||
for (int x = 0; x < size_x; x++) { | ||
int rgb = Color.HSBtoRGB(h, x/((float) size_x+1), 1f-y/((float) size_y+1)); | ||
imageOut.setRGB(x, y, rgb); | ||
} | ||
} | ||
|
||
return imageOut; | ||
} | ||
|
||
public static BufferedImage hColorSelector() { | ||
int size_x = 25; | ||
int size_y = 255; | ||
BufferedImage imageOut = new BufferedImage(size_x, size_y, BufferedImage.TYPE_INT_RGB); | ||
|
||
for (int y = 0; y < size_y; y++) { | ||
for (int x = 0; x < size_x; x++) { | ||
int rgb = Color.HSBtoRGB(y/((float) size_y+1), 1f, 1f); | ||
imageOut.setRGB(x, y, rgb); | ||
} | ||
} | ||
|
||
return imageOut; | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
src/main/java/fr/dams4k/cpsmod/core/colorchooser/selectors/HColorSelector.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package fr.dams4k.cpsmod.core.colorchooser.selectors; | ||
|
||
import java.awt.event.MouseEvent; | ||
import java.awt.image.BufferedImage; | ||
|
||
public class HColorSelector extends SelectorBase { | ||
private SBColorSelector sbColorSelector; | ||
private float H = 0f; | ||
|
||
public HColorSelector(BufferedImage baseBufferedImage, SBColorSelector sbColorSelector, float H) { | ||
super(baseBufferedImage, true, false); | ||
|
||
this.sbColorSelector = sbColorSelector; | ||
this.H = H; | ||
|
||
updateIcon(0, (int) this.H * getBaseBufferedImage().getHeight()); | ||
} | ||
|
||
@Override | ||
public void updateIcon(MouseEvent event) { | ||
super.updateIcon(event); | ||
|
||
this.H = this.clamp(event.getY(), 0, 255) / (float) this.getIcon().getIconHeight(); | ||
this.sbColorSelector.refreshIcon(this.H); | ||
} | ||
} |
28 changes: 28 additions & 0 deletions
28
src/main/java/fr/dams4k/cpsmod/core/colorchooser/selectors/SBColorSelector.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package fr.dams4k.cpsmod.core.colorchooser.selectors; | ||
|
||
import java.awt.event.MouseEvent; | ||
import java.awt.image.BufferedImage; | ||
|
||
import fr.dams4k.cpsmod.core.colorchooser.ImageGenerators; | ||
|
||
public class SBColorSelector extends SelectorBase { | ||
float S; | ||
float B; | ||
|
||
public SBColorSelector(BufferedImage baseBufferedImage) { | ||
super(baseBufferedImage, true, true); | ||
updateIcon(0, 0); | ||
} | ||
|
||
public void refreshIcon(float H) { | ||
setBaseBufferedImage(ImageGenerators.sbColorSelector(H)); | ||
} | ||
|
||
@Override | ||
public void updateIcon(MouseEvent event) { | ||
super.updateIcon(event); | ||
|
||
this.S = this.clamp(event.getX(), 0, 255) / (float) this.getIcon().getIconWidth(); | ||
this.B = this.clamp(event.getY(), 0, 255) / (float) this.getIcon().getIconHeight(); | ||
} | ||
} |
138 changes: 138 additions & 0 deletions
138
src/main/java/fr/dams4k/cpsmod/core/colorchooser/selectors/SelectorBase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
package fr.dams4k.cpsmod.core.colorchooser.selectors; | ||
|
||
import java.awt.Color; | ||
import java.awt.event.MouseEvent; | ||
import java.awt.event.MouseListener; | ||
import java.awt.event.MouseMotionListener; | ||
import java.awt.image.BufferedImage; | ||
import java.awt.image.ColorModel; | ||
import java.awt.image.WritableRaster; | ||
|
||
import javax.swing.ImageIcon; | ||
import javax.swing.JLabel; | ||
import javax.swing.border.EmptyBorder; | ||
|
||
public class SelectorBase extends JLabel implements MouseMotionListener, MouseListener { | ||
private BufferedImage baseBufferedImage; | ||
|
||
private boolean showXAxis; | ||
private boolean showYAxis; | ||
|
||
private int selectX; | ||
private int selectY; | ||
|
||
private Color inlineColor = Color.BLACK; | ||
private Color outlineColor = Color.WHITE; | ||
|
||
public SelectorBase(BufferedImage baseBufferedImage, boolean showXAxis, boolean showYAxis) { | ||
super(new ImageIcon(baseBufferedImage)); | ||
setBorder(new EmptyBorder(5, 5, 5, 5)); | ||
|
||
this.baseBufferedImage = baseBufferedImage; | ||
this.showXAxis = showXAxis; | ||
this.showYAxis = showYAxis; | ||
|
||
addMouseMotionListener(this); | ||
addMouseListener(this); | ||
} | ||
|
||
@Override | ||
public void mouseDragged(MouseEvent event) { | ||
this.updateIcon(event); | ||
} | ||
|
||
@Override | ||
public void mouseMoved(MouseEvent event) { | ||
} | ||
|
||
@Override | ||
public void mouseClicked(MouseEvent event) { | ||
this.updateIcon(event); | ||
} | ||
|
||
@Override | ||
public void mouseEntered(MouseEvent event) { | ||
} | ||
|
||
@Override | ||
public void mouseExited(MouseEvent event) { | ||
} | ||
|
||
@Override | ||
public void mousePressed(MouseEvent event) { | ||
} | ||
|
||
@Override | ||
public void mouseReleased(MouseEvent event) { | ||
} | ||
|
||
public void updateIcon(MouseEvent event) { | ||
this.selectX = event.getX(); | ||
this.selectY = event.getY(); | ||
|
||
this.setIcon(new ImageIcon(this.bufferedImageGenAxis(selectX, selectY))); | ||
} | ||
|
||
public void updateIcon(int selectX, int selectY) { | ||
this.selectX = selectX; | ||
this.selectY = selectY; | ||
|
||
this.setIcon(new ImageIcon(this.bufferedImageGenAxis(selectX, selectY))); | ||
} | ||
|
||
public BufferedImage bufferedImageGenAxis(int event_x, int event_y) { | ||
BufferedImage newBufferedImage = this.copyBuffered(baseBufferedImage); | ||
|
||
if (this.showXAxis) { | ||
for (int x = 0; x < newBufferedImage.getWidth(); x++) { | ||
newBufferedImage.setRGB(x, clamp(event_y, 0, newBufferedImage.getHeight() - 1), inlineColor.getRGB()); | ||
|
||
if (event_y - 1 >= 0 && (x != event_x || !this.showYAxis)) { | ||
newBufferedImage.setRGB(x, clamp(event_y - 1, 0, newBufferedImage.getHeight() - 1), | ||
outlineColor.getRGB()); | ||
} | ||
if (event_y + 1 < newBufferedImage.getHeight() - 1 && (x != event_x || !this.showYAxis)) { | ||
newBufferedImage.setRGB(x, clamp(event_y + 1, 0, newBufferedImage.getHeight() - 1), | ||
outlineColor.getRGB()); | ||
} | ||
} | ||
} | ||
|
||
if (this.showYAxis) { | ||
for (int y = 0; y < newBufferedImage.getWidth(); y++) { | ||
newBufferedImage.setRGB(clamp(event_x, 0, newBufferedImage.getWidth() - 1), y, inlineColor.getRGB()); | ||
|
||
if (event_x - 1 >= 0 && (y != event_y || !this.showXAxis)) { | ||
newBufferedImage.setRGB(clamp(event_x - 1, 0, newBufferedImage.getWidth() - 1), y, | ||
outlineColor.getRGB()); | ||
} | ||
if (event_x + 1 < newBufferedImage.getWidth() - 1 && (y != event_y || !this.showXAxis)) { | ||
newBufferedImage.setRGB(clamp(event_x + 1, 0, newBufferedImage.getWidth() - 1), y, | ||
outlineColor.getRGB()); | ||
} | ||
} | ||
} | ||
|
||
return newBufferedImage; | ||
} | ||
|
||
public BufferedImage copyBuffered(BufferedImage bufferedImage) { | ||
ColorModel colorModel = bufferedImage.getColorModel(); | ||
boolean isAlphaPremultiplied = colorModel.isAlphaPremultiplied(); | ||
WritableRaster raster = bufferedImage.copyData(null); | ||
return new BufferedImage(colorModel, raster, isAlphaPremultiplied, null); | ||
} | ||
|
||
public int clamp(int value, int min, int max) { | ||
return Math.max(min, Math.min(max, value)); | ||
} | ||
|
||
public void setBaseBufferedImage(BufferedImage baseBufferedImage) { | ||
this.baseBufferedImage = baseBufferedImage; | ||
this.setIcon(new ImageIcon(this.bufferedImageGenAxis(this.selectX, this.selectY))); | ||
} | ||
|
||
public BufferedImage getBaseBufferedImage() { | ||
return baseBufferedImage; | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/fr/dams4k/cpsmod/core/colorchooser/sliders/BaseSlider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package fr.dams4k.cpsmod.core.colorchooser.sliders; | ||
|
||
import javax.swing.JLabel; | ||
import javax.swing.JPanel; | ||
import javax.swing.JSlider; | ||
|
||
public class BaseSlider extends JPanel { | ||
public JLabel label; | ||
public JSlider slider; | ||
|
||
public BaseSlider(String label_name) { | ||
this.label = new JLabel(label_name); | ||
this.slider = new JSlider(0, 255, 0); | ||
|
||
add(label); | ||
add(slider); | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
src/main/java/fr/dams4k/cpsmod/core/colorchooser/sliders/SlidersContainer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package fr.dams4k.cpsmod.core.colorchooser.sliders; | ||
|
||
import java.awt.CardLayout; | ||
|
||
import javax.swing.BoxLayout; | ||
import javax.swing.JPanel; | ||
import javax.swing.border.EmptyBorder; | ||
|
||
public class SlidersContainer extends JPanel { | ||
public SlidersContainer() { | ||
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); | ||
setBorder(new EmptyBorder(5, 5, 5, 5)); | ||
|
||
BaseSlider redSlider = new BaseSlider("red :"); | ||
BaseSlider greenSlider = new BaseSlider("green :"); | ||
BaseSlider blueSlider = new BaseSlider("blue :"); | ||
|
||
add(redSlider); | ||
add(greenSlider); | ||
add(blueSlider); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
from PIL import Image | ||
import colorsys | ||
|
||
def hsv2rgb(h,s,v): | ||
return tuple(round(i * 255) for i in colorsys.hsv_to_rgb(h,s,v)) | ||
|
||
size = (255, 255) | ||
|
||
img = Image.new("RGB", size) | ||
|
||
for y in range(size[1]): | ||
for x in range(size[0]): | ||
img.putpixel((x, y), hsv2rgb(0, x/(size[0]+1), 1-y/(size[1]+1))) | ||
|
||
img.show() |
Oops, something went wrong.