Sunteți pe pagina 1din 3

Mavru Aurelian

Grupa 343A3

APLICATIE JAVA
Negative Image

1. Introducere
Proiectul are ca scop convertirea unei imagini in negative acesteia si
salvarea rezultatului obtinut intr-o locatie definita de utilizator.

2. Descrierea aplicatiei
Aplicatia converteste o imagine aplicandu-i un filtru de tipul negative
image. La pornire aceasta afiseaza cele trei optiuni disponibile:
Selectarea unei imagini pentru procesare
Completarea unui camp text pentru a define locatia unde sa se
salveze imaginea procesata
Convertirea imaginii selectate

3. Teorie
Cea mai mica unitate din cadrul unui fisier imagine este pixelul. Fiecare
pixel este format dintr-un sir de biti care definesc nivelul de
transparenta, de rosu, de verde si de albastru. Fiecare are o valoare
intre 0 si 255 inclusiv, iar in concluzie, pentru a reprezenta un pixel
avem nevoie de 4x8 = 32 biti, respective 4 bytes.

Pentru a forma negativul imaginii trebuie sa modificam in mod independent


fiecare pixel, adica sa modificam nivelurile culorilor dupa cum urmeaza:
newR = 255 R
newG = 255 G
newB = 255 B

4. Descrierea aplicatiei
Mavru Aurelian
Grupa 343A3

Aplicatia contine 2 clase .java, un fisier de configurare a stilurilor (nefolosit)


si un fisier .FXML pentru configurarea interfetei visuale.
Main.java
package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.Label;

public class Main extends Application {


@Override
public void start(Stage primaryStage) {
try {
//BorderPane root = new BorderPane();
Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {


launch(args);
}
}

Porneste aplicatia si incarca interfata initiala

MainController.java
package application;

import java.awt.TextField;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class MainController extends Application{


@FXML private TextField tittel;
@FXML private Button browse;
private File file;

@FXML
private void handleButton1Action(ActionEvent event) {
System.out.println(tittel.getText());
}

@FXML
public void randomm(ActionEvent event) {

FileChooser fileChooser = new FileChooser();


fileChooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("All Images", "*.*"),
new FileChooser.ExtensionFilter("JPG", "*.jpg"),
new FileChooser.ExtensionFilter("GIF", "*.gif"),
new FileChooser.ExtensionFilter("BMP", "*.bmp"),
new FileChooser.ExtensionFilter("PNG", "*.png")
);
fileChooser.setTitle("Open Resource File");
file = fileChooser.showOpenDialog((Stage)browse.getScene().getWindow());
}

@FXML
public void rajndom(ActionEvent event) {
if (file != null)
{
BufferedImage img = null;
File f = null;
//read image
try{
f = file;
img = ImageIO.read(f);
Mavru Aurelian
Grupa 343A3
}catch(IOException e){
System.out.println(e);
}
//get image width and height
int width = img.getWidth();
int height = img.getHeight();
//convert to negative
for(int y = 0; y < height; y++){
for(int x = 0; x < width; x++){
int p = img.getRGB(x,y);
int a = (p>>24)&0xff;
int r = (p>>16)&0xff;
int g = (p>>8)&0xff;
int b = p&0xff;
//subtract RGB from 255
r = 255 - r;
g = 255 - g;
b = 255 - b;
//set new RGB value
p = (a<<24) | (r<<16) | (g<<8) | b;
img.setRGB(x, y, p);
}
}
//write image
try{
f = new File("C:\\Users\\Auras\\Desktop\\Output.jpg");
ImageIO.write(img, "jpg", f);
}catch(IOException e){
System.out.println(e);
}
}
}

@Override
public void start(Stage primaryStage) throws Exception {
// TODO Auto-generated method stub

}
}

Functia randomm deschide o fereastra care ofera posibilitatea de


alegere a unei imagini oferind in acelasi timp si restrictii pentru tipurile
de fisiere cautate.

Functia rajndom proceseaza imaginea si creaza un nou fisier de tip


imagine cu filtrul Negative Image aplicat.

S-ar putea să vă placă și