0% au considerat acest document util (0 voturi)
82 vizualizări3 pagini

Aplicatie Java

Aplicația convertește o imagine într-un negative al acesteia modificând valorile pixelilor. Alege o imagine, aplică un filtru care înlocuiește valorile culorilor fiecărui pixel cu diferența dintre valoarea maximă și valoarea inițială și salvează rezultatul într-o locație specificată.

Încărcat de

Mast3rm1nd
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
82 vizualizări3 pagini

Aplicatie Java

Aplicația convertește o imagine într-un negative al acesteia modificând valorile pixelilor. Alege o imagine, aplică un filtru care înlocuiește valorile culorilor fiecărui pixel cu diferența dintre valoarea maximă și valoarea inițială și salvează rezultatul într-o locație specificată.

Încărcat de

Mast3rm1nd
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

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