Skip to content

Commit

Permalink
adding new features to dev remote?
Browse files Browse the repository at this point in the history
  • Loading branch information
Dams4K committed May 16, 2022
1 parent 351ab2c commit 457982b
Show file tree
Hide file tree
Showing 9 changed files with 375 additions and 8 deletions.
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);
}

}
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;
}
}
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);
}
}
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();
}
}
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;
}
}
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);
}
}
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);
}
}
15 changes: 15 additions & 0 deletions src/main/java/fr/dams4k/cpsmod/core/proto.py
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()
Loading

0 comments on commit 457982b

Please sign in to comment.