Skip to content
Snippets Groups Projects
Commit 531e4f87 authored by WiseCrucian's avatar WiseCrucian
Browse files

add task3

parent 5e7c0745
No related merge requests found
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java/org/example/input_image.jpg" charset="windows-1251" />
<file url="file://$PROJECT_DIR$/src/main/java/org/example/input_image.jpg" charset="windows-1251" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JpaBuddyIdeaProjectConfig">
<option name="renamerInitialized" value="true" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="ProjectType">
<option name="id" value="jpab" />
</component>
</project>
\ No newline at end of file
task3/input_image.jpg

478 KiB

task3/output_image.jpg

167 KiB

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>untitled6</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
\ No newline at end of file
package org.example;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Main {
private static BufferedImage inputImage;
private static BufferedImage outputImage;
private static JLabel imageLabel;
private static double hueModifier = 0.5;
private static double saturationModifier = 1.0;
private static double brightnessModifier = 1.0;
public static void main(String[] args) {
JFrame frame = new JFrame("RGB to HSV Converter");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
JPanel controlsPanel = new JPanel();
controlsPanel.setLayout(new FlowLayout());
JButton openButton = new JButton("Open Image");
openButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
try {
inputImage = ImageIO.read(selectedFile);
updateImage();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
JLabel hueLabel = new JLabel("Hue:");
JSlider hueSlider = new JSlider(0, 100, 50);
hueSlider.addChangeListener(e -> {
hueModifier = hueSlider.getValue() / 100.0;
updateImage();
});
JLabel saturationLabel = new JLabel("Saturation:");
JSlider saturationSlider = new JSlider(0, 200, 100);
saturationSlider.addChangeListener(e -> {
saturationModifier = saturationSlider.getValue() / 100.0;
updateImage();
});
JLabel brightnessLabel = new JLabel("Brightness:");
JSlider brightnessSlider = new JSlider(0, 200, 100);
brightnessSlider.addChangeListener(e -> {
brightnessModifier = brightnessSlider.getValue() / 100.0;
updateImage();
});
controlsPanel.add(openButton);
controlsPanel.add(hueLabel);
controlsPanel.add(hueSlider);
controlsPanel.add(saturationLabel);
controlsPanel.add(saturationSlider);
controlsPanel.add(brightnessLabel);
controlsPanel.add(brightnessSlider);
imageLabel = new JLabel();
frame.add(controlsPanel, BorderLayout.NORTH);
frame.add(imageLabel, BorderLayout.CENTER);
frame.setVisible(true);
}
private static void updateImage() {
if (inputImage != null) {
outputImage = new BufferedImage(inputImage.getWidth(), inputImage.getHeight(), BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < inputImage.getHeight(); y++) {
for (int x = 0; x < inputImage.getWidth(); x++) {
int rgb = inputImage.getRGB(x, y);
int newRGB = convertRGBtoHSV(rgb, hueModifier, saturationModifier, brightnessModifier);
outputImage.setRGB(x, y, newRGB);
}
}
imageLabel.setIcon(new ImageIcon(outputImage));
}
}
private static int convertRGBtoHSV(int rgb, double hueModifier, double saturationModifier, double brightnessModifier) {
int red = (rgb >> 16) & 0xFF;
int green = (rgb >> 8) & 0xFF;
int blue = rgb & 0xFF;
double r = red / 255.0;
double g = green / 255.0;
double b = blue / 255.0;
double cmax = Math.max(Math.max(r, g), b);
double cmin = Math.min(Math.min(r, g), b);
double delta = cmax - cmin;
double hue = 0;
if (delta != 0) {
if (cmax == r) {
hue = 60 * (((g - b) / delta) % 6);
} else if (cmax == g) {
hue = 60 * (((b - r) / delta) + 2);
} else if (cmax == b) {
hue = 60 * (((r - g) / delta) + 4);
}
}
if (hue < 0) {
hue += 360;
}
double saturation = (cmax == 0) ? 0 : (delta / cmax);
double value = cmax;
hue = (hue + 360 * hueModifier) % 360;
saturation = Math.min(1.0, saturation * saturationModifier);
value = Math.min(1.0, value * brightnessModifier);
return Color.HSBtoRGB((float) (hue / 360), (float) saturation, (float) value);
}
public static int HSBtoRGB(float hue, float saturation, float value) {
int h = (int) (hue / 60) % 6;
float f = hue / 60 - h;
float p = value * (1 - saturation);
float q = value * (1 - f * saturation);
float t = value * (1 - (1 - f) * saturation);
float red, green, blue;
switch (h) {
case 0:
red = value;
green = t;
blue = p;
break;
case 1:
red = q;
green = value;
blue = p;
break;
case 2:
red = p;
green = value;
blue = t;
break;
case 3:
red = p;
green = q;
blue = value;
break;
case 4:
red = t;
green = p;
blue = value;
break;
default:
red = value;
green = p;
blue = q;
break;
}
int r = Math.min(255, Math.max(0, Math.round(red * 255)));
int g = Math.min(255, Math.max(0, Math.round(green * 255)));
int b = Math.min(255, Math.max(0, Math.round(blue * 255)));
return (r << 16) | (g << 8) | b;
}
}
task3/src/main/java/org/example/input_image.jpg

478 KiB

0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment