Bild einscannen und speichern

headnut

Gesperrter Benutzer
Guten Morgen allerseits

Seit Stunden nun bin ich am suchen einer simplen Lösung für ein kleines Problem...

Ich möchte mit einem Button ein Bild von einem Scanner einlesen und nachher in einem Ordner speichern.

Ich habe mich mit mmscomputing auseinander gesetzt, jedoch ohne erfolg. Es kann doch nicht soo schwer sein oder?

Vielen Dank schonmal für die Hilfe.
 

homer65

Top Contributor
Linux Nutzer können scanimage nutzen. Ist allerdings per Kommandozeile.
Ich habe mal ein Java Programm drumherum gestrickt, das die eingescannten Bilder in einer MySQL Datenbank speichert.
Bei Interesse kannst du den Quellcode haben.
 

homer65

Top Contributor
Für dich von Interesse ist wahrscheinlich nur das beiliegende scanner Skript:
Code:
#!/bin/bash
#
ein=/tmp/temp.tiff
aus=${1}
rm "${ein}"
rc=0
echo "Gescannt werden soll:" ${aus}
scanimage --resolution=150 --format=tiff > "${ein}"
rc=$?
if [ $rc -ne 0 ]; then
	echo "scanimage returned:" $rc
	exit 12
fi
convert "${ein}" "${aus}"
rc=$?
if [ $rc -ne 0 ]; then
	echo "convert returned:" $rc
	exit 8
fi
rm "${ein}"
rc=$?
if [ $rc -ne 0 ]; then
	echo "rm returned:" $rc
	exit 4
fi
exit 0
 

s4ke

Bekanntes Mitglied
Dann musst du wohl da durch. Das hatte ich auch schonmal gemacht, aber leider den Code und die .dll dafür verloren... Wird zudem Teil des Projekts, das ich nach meinem Player vor habe.
 

headnut

Gesperrter Benutzer
mit mmscomputing hat niemand erfahrung?

Ich habe follgendes funktienerendes Programm gefunden das für mich fast reichen würde:

Meine Frage wäre nun ob ich dem Api irgendwo mitteilen kann mit welchen grauwerten und so es scannen soll? Kennt das jemand??

Code:
// Don't forget to comment out next line if the resulting class is run from the java root directory


import java.io.File;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

import uk.co.mmscomputing.device.scanner.Scanner;
import uk.co.mmscomputing.device.scanner.ScannerDevice;
import uk.co.mmscomputing.device.scanner.ScannerListener;
import uk.co.mmscomputing.device.scanner.ScannerIOException;
import uk.co.mmscomputing.device.scanner.ScannerIOMetadata;

public class twaintest implements ScannerListener{

  static twaintest app;  

  Scanner Scanner;
  boolean isFinished = false;

  @SuppressWarnings("static-access")
public twaintest(String[] argv)throws ScannerIOException{
    Scanner=Scanner.getDevice();
    Scanner.addListener(this);    
    Scanner.acquire();
  }

public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata){
    if(type.equals(ScannerIOMetadata.ACQUIRED)){
      BufferedImage image=metadata.getImage();
      System.out.println("Have an image now!");
      try{
        ImageIO.write(image, "BMP", new File("TEST.jpg"));
      }catch(Exception e){
        e.printStackTrace();
      }
    }else if(type.equals(ScannerIOMetadata.NEGOTIATE)){
      ScannerDevice device=metadata.getDevice();
      try{
        device.setShowUserInterface(false);
        device.setShowProgressBar(true);
        device.setResolution(100);
      
      }catch(Exception e){
        e.printStackTrace();
      }
    }else if(type.equals(ScannerIOMetadata.STATECHANGE)){
      System.err.println(metadata.getStateStr());
      if(metadata.isFinished()){
        isFinished = true;
      }
    }else if(type.equals(ScannerIOMetadata.EXCEPTION)){
      metadata.getException().printStackTrace();
    }
  }

  @SuppressWarnings("static-access")
public static void main(String[] argv){
    try{
      app=new twaintest(argv);                             // 2010-06-05
      while(!app.isFinished){                              // We need to keep the 'main' thread alive until 
        Thread.currentThread().sleep(200);                 // the native jtwain deamon thread has finished, otherwise
      }                                                    // the program is killed while the data source is still running
    }catch(Exception e){                                   // => crash inevitable
      e.printStackTrace();
    }
  }
}
 

headnut

Gesperrter Benutzer
Es geht mir nicht in den kopf dass es nicht möglich sein soll im 2011 auf einfache art und weise einen Scanner anzusteuern!

Drucken ist ja auch kein Problem...
 

headnut

Gesperrter Benutzer
Ein ganz neuer Ansatz! Ich müsste zwar ein zimlich aufwendiges Gui basteln aber dafüt könnte ich alles anpassen, grauwerte und so!

Das ganze Array mässig abspeichern und schon hätte ich spezifische einstellungen pro produkt!

Muss ich mir morgen fertig überlegen, ich denke da gibt es ganze Tutorials und beispiele!
 

Ariol

Top Contributor
Hab's gerade nicht hier, aber AFAIR gab es eine getDevices()-Funktion in einer der Klassen, mit der man über die gefundenen Geräte iterieren konnte.

Ansonsten sollte die API aber mit TWAIN-fähigen Geräten umgehen können.
 

headnut

Gesperrter Benutzer
Diese findet auch glaube ich so eine art scanner:


Das gibt sie aus:
Code:
uk.co.mmscomputing.device.twain.TwainScanner@7d8483

mit meinem zuhause lief es mit diesem hier nicht mehr
 

Ariol

Top Contributor
Das Object hat nicht evtl. ein
Code:
getName()
oder
Code:
getDeviceIdentifier()
o.s.ä.
 

headnut

Gesperrter Benutzer
Irgendiwe nicht nein hat nur zwei getter...

naja nun läuft der scanner wieder... unglaublich, jetzt muss ich mir einfach mal das vorgehen durch den kopf gehen lassen...

Das projekt bringt mich noch um:) Wiso der s******e Scanner plötzlich geht weiss ich übrigens nicht, aber nach dem dritten mal treiber installieren lief er...
 

Ariol

Top Contributor
Nach einigen Anläufen:

Java:
public BufferedImage setGamma(BufferedImage image, double gammaFactor)
	{
		double gammaPotency = 1.0 / gammaFactor;
		int w = image.getWidth(), h = image.getHeight();

		for (int x = 0; x < w; x++)
		{
			for (int y = 0; y < h; y++)
			{
				int argb = image.getRGB(x, y);
				int nargb = ((argb >> 24) & 0xFF) << 24; // set alpha
				for (int i = 0; i < 24; i += 8)
				{
					int value = (int) (Math.pow((argb >> i) & 0xFF, gammaPotency));
					nargb += (int) ((value > 0xFF) ? (0xFF << i) : (value << i));
				}
				image.setRGB(x, y, nargb);
			}
		}

		return image;
	}
 

headnut

Gesperrter Benutzer
hmm

ich begreiff den programm teil nicht ganz...

kann es sein dass ich so das Bild nur einmal mit einem Faktor bearbeiten kann und nachher nie mehr auf den Standart zurückkomme?

Weil plötzlich seh ich auf dem bild nichts mehr, und wegen dem Faktor 1 gehts dann nicht mehr auf standart zurück:-(


Edit: AAaaaaaaaaaaaaaaaaaah ich depp! sag noch nichts ich hbae eine idee...
 
Zuletzt bearbeitet:

headnut

Gesperrter Benutzer
Perfekt ich dank dir viel viel mal für diese genialen Erklätungen! Du musst ein wahrer spezialist sein!!!

Danke danke danke danke danke!
 

headnut

Gesperrter Benutzer
jetzt hab ich doch nochmal ne frage

Ich habe zwei Bild Objekte, die Src mit dem Originalbild das ich veräneder und
nach der Gamma aktualisierung ind die Dest speichere. Um die Anzeige richtig zu machen
rescale ich das bild mit dem eingestellten Kontrast und Helligkeit.

Wenn ich nun jedoch mit den Buttons den Gammawert senken möchte macht er das nur beim ersten klick und dann fertig! wisoooo?

// Edit: So funktioniert dies im Grundstatz nicht, wie muss ich die beiden Korrekturen (Helligkeit, Kontrast und Gamma wert) kombinieren?


Code:
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
@SuppressWarnings("serial")
public class Berabeiten extends JFrame {
    DisplayPanel displayPanel;
    JButton brightenButton, darkenButton,
            contIncButton, contDecButton,
    		jBspeichern, jBGammaPos,
    		jBGammaNeg;

    @SuppressWarnings("deprecation")
	public Berabeiten() throws IOException {
        super();
        Container container = getContentPane();

        displayPanel = new DisplayPanel();
        container.add(displayPanel);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2, 3));
        panel.setBorder(new TitledBorder(
            "Klicke ein Button um Kontrast und helligkeit zu ändern"));

        brightenButton = new JButton("Helligkeit >>");
        brightenButton.addActionListener(new ButtonListener());
        darkenButton = new JButton("Helligkeit <<");
        darkenButton.addActionListener(new ButtonListener());

        contIncButton = new JButton("Kontrast >>");
        contIncButton.addActionListener(new ButtonListener());
        contDecButton = new JButton("Kontrast <<");
        contDecButton.addActionListener(new ButtonListener());
        
        jBspeichern = new JButton("Speichern");
        jBspeichern.addActionListener(new ButtonListener());
        
        jBGammaPos = new JButton("Gamma >>");
        jBGammaPos.addActionListener(new ButtonListener());

        jBGammaNeg = new JButton("Gamma <<");
        jBGammaNeg.addActionListener(new ButtonListener());
        
        panel.add(brightenButton);
        panel.add(darkenButton);
        panel.add(contIncButton);
        panel.add(contDecButton);
        panel.add(jBspeichern);
        panel.add(jBGammaPos);
        panel.add(jBGammaNeg);

        container.add(BorderLayout.SOUTH, panel);

        addWindowListener(new WindowEventHandler());
        setSize(displayPanel.getWidth(), displayPanel.getHeight() + 10);
        show(); // Display the frame
    }

    class WindowEventHandler extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    }

    public static void main(String arg[]) throws IOException {
        new Berabeiten();
    }

    class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JButton temp = (JButton) e.getSource();

            if (temp.equals(brightenButton)) {
                displayPanel.brighten = true;
                displayPanel.changeOffSet();
                System.out.println(displayPanel.offset + "=offset");
                displayPanel.rescale();
                displayPanel.repaint();
            }
            else if (temp.equals(darkenButton)) {
                displayPanel.brighten = false;
                displayPanel.changeOffSet();
                System.out.println(displayPanel.offset + "=offset");
                displayPanel.rescale();
                displayPanel.repaint();
            }
            else if (temp.equals(contIncButton)) {
                displayPanel.contrastInc = true;
                displayPanel.changeScaleFactor();
                System.out.println(displayPanel.scaleFactor + "=scaleF");
                displayPanel.rescale();
                displayPanel.repaint();
            }
            else if (temp.equals(contDecButton)) {
                displayPanel.contrastInc = false;
                displayPanel.changeScaleFactor();
                System.out.println(displayPanel.scaleFactor + "=scaleF");
                displayPanel.rescale();
                displayPanel.repaint();
            }
            else if (temp.equals(jBspeichern)) {
            	try {
					displayPanel.speichern();
				} catch (IOException e1) {
					System.out.println("Fehler beim speichern");
				}
            }
            else if(temp.equals(jBGammaPos)) {
            	displayPanel.gammaButton = true;
            	displayPanel.setGamma(displayPanel.changeGamma());
            	displayPanel.rescale();
            	displayPanel.repaint();
            }
            else if(temp.equals(jBGammaNeg)) {
            	displayPanel.gammaButton = false;
            	displayPanel.setGamma(displayPanel.changeGamma());
            	displayPanel.rescale();
            	displayPanel.repaint();
            }
        }
    }
}
@SuppressWarnings("serial")
class DisplayPanel extends JPanel {
    Image displayImage;
    BufferedImage biSrc, biDest, bi; 
    Graphics2D big;
    RescaleOp rescale;
    float scaleFactor = 1.0f;
    float offset = 10;
    float gammaFaktor = 0.0f;
    boolean brighten, contrastInc, gammaButton;

    DisplayPanel() throws IOException {
        setBackground(Color.black); 
        loadImage();
        setSize(displayImage.getWidth(this),
                displayImage.getWidth(this));
        createBufferedImages();
    }

    public void loadImage() throws IOException {
    	
    	// Bild einlesen
		BufferedImage imgIn = ImageIO.read(new File("C:/Dokumente und Einstellungen/rs.KE/workspace/Bachmann Forming/Kamera Bild/image.jpg"));
		
		// Um 90% verkleinern
		AffineTransformOp atop = new AffineTransformOp(AffineTransform.getScaleInstance(0.18, 0.18), AffineTransformOp.TYPE_BICUBIC);
		
		// Ausgabe
		BufferedImage imgOut = atop.createCompatibleDestImage(imgIn, ColorModel.getRGBdefault());
		
		// Bild verkleinern
		atop.filter(imgIn, imgOut);
    	
    	
    	
        displayImage = imgOut;
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(displayImage, 1);
        try {
            mt.waitForAll();
        } catch (Exception e) {
            System.out.println("Exception while loading.");
        }
 
        if (displayImage.getWidth(this) == -1) {
            System.out.println("No jpg file");
            System.exit(0);
        }
    }

    public void createBufferedImages() {
        biSrc = new BufferedImage(displayImage.getWidth(this),
                                  displayImage.getHeight(this),
                                  BufferedImage.TYPE_INT_RGB);

        big = biSrc.createGraphics();
        big.drawImage(displayImage, 0, 0, this);

        biDest = new BufferedImage(displayImage.getWidth(this),
                                   displayImage.getHeight(this),
                                   BufferedImage.TYPE_INT_RGB);
        bi = biSrc;
    }

    public void changeOffSet() {
        if (brighten) {
            if (offset < 255)
               offset = offset+5.0f;
        }
        else {
            if (offset > -255)
               offset = offset-5.0f;
        }
    }

    public void changeScaleFactor() {
        if (contrastInc) {
            if (scaleFactor < 2)
                scaleFactor = scaleFactor+0.1f;
        }
        else {
            if (scaleFactor > -2)
                scaleFactor = scaleFactor-0.1f;
        }
    }
    
    public double changeGamma() {
        if (gammaButton) {
            if (gammaFaktor < 500)
                gammaFaktor = gammaFaktor+0.1f;
        }
        else {
            if (gammaFaktor > 0)
                gammaFaktor = gammaFaktor-0.1f;
        }
        System.out.println(gammaFaktor);
        return gammaFaktor;
    }
    
    public void rescale() {
        rescale = new RescaleOp(scaleFactor, offset, null);
        rescale.filter(biSrc, biDest);
        bi = biDest;
    }

    public void update(Graphics g) {
        g.clearRect(0, 0, getWidth(), getHeight());
        paintComponent(g);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2D = (Graphics2D) g;

        g2D.drawImage(bi, 0, 0, this);
    }
    
    public void speichern() throws IOException {
    	ImageIO.write(bi, "BMP", new File("C:/Dokumente und Einstellungen/rs.KE/workspace/Bachmann Forming/Kamera Bild/image.jpg"));
    }
    
    public void setGamma(double gammaFactor)
    {    	
        double gammaPotency = 1.0 / gammaFactor;
        System.out.println(gammaPotency);
        int w = biSrc.getWidth(), h = biSrc.getHeight();
 
        for (int x = 0; x < w; x++)
        {
            for (int y = 0; y < h; y++)
            {
                int argb = biSrc.getRGB(x, y);
                int nargb = ((argb >> 24) & 0xFF) << 24; // set alpha
                for (int i = 0; i < 24; i += 8)
                {
                    int value = (int) (Math.pow((argb >> i) & 0xFF, gammaPotency));
                    nargb += (int) ((value > 0xFF) ? (0xFF << i) : (value << i));
                }
                biDest.setRGB(x, y, nargb);
                bi = biDest;
            }
        }

    }
}
 
Zuletzt bearbeitet:

headnut

Gesperrter Benutzer
Sooooo jetzt hab ich mal meinen kompletten gehirnschmalz zusammengeholt, kurz geschüttelt und tatsächlich! ich habs geschaft!!

Für alle dies interresiert:

Code:
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
@SuppressWarnings("serial")
public class Berabeiten extends JFrame {
    DisplayPanel displayPanel;
    JButton brightenButton, darkenButton,
            contIncButton, contDecButton,
    		jBspeichern, jBGammaPos,
    		jBGammaNeg;

    @SuppressWarnings("deprecation")
	public Berabeiten() throws IOException {
        super();
        Container container = getContentPane();

        displayPanel = new DisplayPanel();
        container.add(displayPanel);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2, 3));
        panel.setBorder(new TitledBorder(
            "Klicke ein Button um Kontrast und helligkeit zu ändern"));

        brightenButton = new JButton("Helligkeit >>");
        brightenButton.addActionListener(new ButtonListener());
        darkenButton = new JButton("Helligkeit <<");
        darkenButton.addActionListener(new ButtonListener());

        contIncButton = new JButton("Kontrast >>");
        contIncButton.addActionListener(new ButtonListener());
        contDecButton = new JButton("Kontrast <<");
        contDecButton.addActionListener(new ButtonListener());
        
        jBspeichern = new JButton("Speichern");
        jBspeichern.addActionListener(new ButtonListener());
        
        jBGammaPos = new JButton("Gamma >>");
        jBGammaPos.addActionListener(new ButtonListener());

        jBGammaNeg = new JButton("Gamma <<");
        jBGammaNeg.addActionListener(new ButtonListener());
        
        panel.add(brightenButton);
        panel.add(darkenButton);
        panel.add(contIncButton);
        panel.add(contDecButton);
        panel.add(jBspeichern);
        panel.add(jBGammaPos);
        panel.add(jBGammaNeg);

        container.add(BorderLayout.SOUTH, panel);

        addWindowListener(new WindowEventHandler());
        setSize(displayPanel.getWidth(), displayPanel.getHeight() + 10);
        show(); // Display the frame
    }

    class WindowEventHandler extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    }

    public static void main(String arg[]) throws IOException {
        new Berabeiten();
    }

    class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JButton temp = (JButton) e.getSource();

            if (temp.equals(brightenButton)) {
                displayPanel.brighten = true;
                displayPanel.changeOffSet();
                System.out.println(displayPanel.offset + "=offset");
                //displayPanel.rescale();
                displayPanel.bildAktual();
                displayPanel.repaint();
                
            }
            else if (temp.equals(darkenButton)) {
                displayPanel.brighten = false;
                displayPanel.changeOffSet();
                System.out.println(displayPanel.offset + "=offset");
                //displayPanel.rescale();
                displayPanel.bildAktual();
                displayPanel.repaint();
            }
            else if (temp.equals(contIncButton)) {
                displayPanel.contrastInc = true;
                displayPanel.changeScaleFactor();
                System.out.println(displayPanel.scaleFactor + "=scaleF");
                //displayPanel.rescale();
                displayPanel.bildAktual();
                displayPanel.repaint();
            }
            else if (temp.equals(contDecButton)) {
                displayPanel.contrastInc = false;
                displayPanel.changeScaleFactor();
                System.out.println(displayPanel.scaleFactor + "=scaleF");
                //displayPanel.rescale();
                displayPanel.bildAktual();
                displayPanel.repaint();
            }
            else if (temp.equals(jBspeichern)) {
            	try {
					displayPanel.speichern();
				} catch (IOException e1) {
					System.out.println("Fehler beim speichern");
				}
            }
            else if(temp.equals(jBGammaPos)) {
            	displayPanel.gammaButton = true;
            	//displayPanel.setGamma(displayPanel.changeGamma());
            	//displayPanel.rescale();
            	displayPanel.changeGamma();
            	displayPanel.bildAktual();
            	displayPanel.repaint();
            }
            else if(temp.equals(jBGammaNeg)) {
            	displayPanel.gammaButton = false;
            	//displayPanel.setGamma(displayPanel.changeGamma());
            	//displayPanel.rescale();
            	displayPanel.changeGamma();
            	displayPanel.bildAktual();
            	displayPanel.repaint();
            	
            }
        }
    }
}
@SuppressWarnings("serial")
class DisplayPanel extends JPanel {
    Image displayImage;
    BufferedImage biSrc, biDest, bi, temp; 
    Graphics2D big;
    RescaleOp rescale;
    RescaleOp rescale2;
    float scaleFactor = 1.0f;
    float offset = 10;
    float gammaFaktor = 1.0f;
    boolean brighten, contrastInc, gammaButton;

    DisplayPanel() throws IOException {
        setBackground(Color.black); 
        loadImage();
        setSize(displayImage.getWidth(this),
                displayImage.getWidth(this));
        createBufferedImages();
    }

    public void loadImage() throws IOException {
    	
    	// Bild einlesen
		BufferedImage imgIn = ImageIO.read(new File("C:/Dokumente und Einstellungen/rs.KE/workspace/Bachmann Forming/Kamera Bild/image.jpg"));
		
		// Um 90% verkleinern
		AffineTransformOp atop = new AffineTransformOp(AffineTransform.getScaleInstance(0.18, 0.18), AffineTransformOp.TYPE_BICUBIC);
		
		// Ausgabe
		BufferedImage imgOut = atop.createCompatibleDestImage(imgIn, ColorModel.getRGBdefault());
		
		// Bild verkleinern
		atop.filter(imgIn, imgOut);
    	
    	
    	
        displayImage = imgOut;
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(displayImage, 1);
        try {
            mt.waitForAll();
        } catch (Exception e) {
            System.out.println("Exception while loading.");
        }
 
        if (displayImage.getWidth(this) == -1) {
            System.out.println("No jpg file");
            System.exit(0);
        }
    }

    public void createBufferedImages() {
        biSrc = new BufferedImage(displayImage.getWidth(this),
                                  displayImage.getHeight(this),
                                  BufferedImage.TYPE_INT_RGB);

        big = biSrc.createGraphics();
        big.drawImage(displayImage, 0, 0, this);

        biDest = new BufferedImage(displayImage.getWidth(this),
                                   displayImage.getHeight(this),
                                   BufferedImage.TYPE_INT_RGB);
        bi = biSrc;
    }

    public void changeOffSet() {
        if (brighten) {
            if (offset < 255)
               offset = offset+5.0f;
        }
        else {
            if (offset > -255)
               offset = offset-5.0f;
        }
    }

    public void changeScaleFactor() {
        if (contrastInc) {
            if (scaleFactor < 2)
                scaleFactor = scaleFactor+0.1f;
        }
        else {
            if (scaleFactor > -2)
                scaleFactor = scaleFactor-0.1f;
        }
    }
    
    public void changeGamma() {
        if (gammaButton) {
            if (gammaFaktor < 500)
                gammaFaktor = gammaFaktor-0.02f;
        }
        else {
            if (gammaFaktor > 0)
                gammaFaktor = gammaFaktor+0.02f;
        }
        System.out.println(gammaFaktor);
    }
    
    public void bildAktual() {
        // aufruf Methode
        temp = rescale2();
        biDest = setGamma(temp, gammaFaktor);
        bi = biDest;
    }
    
    public void rescale() {
    	rescale = new RescaleOp(scaleFactor, offset, null);
        rescale.filter(biSrc, biDest);
        bi = biDest;
    }
    
    public BufferedImage rescale2() {
    	rescale2 = new RescaleOp(scaleFactor, offset, null);
        rescale2.filter(biSrc, biDest);
        return biDest;
    }

    public void update(Graphics g) {
        g.clearRect(0, 0, getWidth(), getHeight());
        paintComponent(g);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2D = (Graphics2D) g;

        g2D.drawImage(bi, 0, 0, this);
    }
    
    public void speichern() throws IOException {
    	ImageIO.write(bi, "BMP", new File("C:/Dokumente und Einstellungen/rs.KE/workspace/Bachmann Forming/Kamera Bild/image.jpg"));
    }
    
    public BufferedImage setGamma(BufferedImage image, double gammaFactor)
    {
        double gammaPotency = 1.0 / gammaFactor;
        int w = image.getWidth(), h = image.getHeight();
 
        for (int x = 0; x < w; x++)
        {
            for (int y = 0; y < h; y++)
            {
                int argb = image.getRGB(x, y);
                int nargb = ((argb >> 24) & 0xFF) << 24; // set alpha
                for (int i = 0; i < 24; i += 8)
                {
                    int value = (int) (Math.pow((argb >> i) & 0xFF, gammaPotency));
                    nargb += (int) ((value > 0xFF) ? (0xFF << i) : (value << i));
                }
                image.setRGB(x, y, nargb);
            }
        }
 
        return image;
    }
}
 

headnut

Gesperrter Benutzer
Damit das thema endgültig fertig ist

die lib mmscomputing hat irgendwelche fehler, ich habe nun die Morena lib genommen, diese ist halt nicht gratis dafür macht sie genau das was ich will!

vielen Dank
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Habe ein svg bild, kann ich das zu svg koordinaten umrechnen, damit ich den Umriss zeichnen kann? Wenn ja wie? Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
OnDemand Prüfen ob Bild defekt ist Allgemeine Java-Themen 4
Y Bild in JPanel setzen Allgemeine Java-Themen 2
Kirby.exe Bild im Zentrum spiegeln Allgemeine Java-Themen 14
I Apache POI Bild in Word ersetzen Allgemeine Java-Themen 15
OnDemand Bild prüfen ob defekt Allgemeine Java-Themen 3
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
K Bild in einem anderen Bild suchen Allgemeine Java-Themen 12
R Compiler-Fehler Bild per E-Mail versenden Allgemeine Java-Themen 3
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
RalleYTN 2D-Grafik Bild mit bilinearer Interpolation skalieren Allgemeine Java-Themen 31
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
S Telefonbuch mit Bild Allgemeine Java-Themen 4
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
T Neuen Kanal in Bild (TIFF) einfügen à la Photoshop Allgemeine Java-Themen 2
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
R HtmlUnit: Canvas als Bild speichern Allgemeine Java-Themen 0
E am häufigsten vorkommenden Farben aus einem Bild Allgemeine Java-Themen 5
S Bild in Raster Allgemeine Java-Themen 1
S Bild in Frame Allgemeine Java-Themen 0
F Punkte in einem Bild finden Allgemeine Java-Themen 10
A Bild aufteilen für getData Allgemeine Java-Themen 3
P Wie füge ich ein Bild in die GUI ein? Allgemeine Java-Themen 7
F ImageJ: Linien und Schnittpunkte in Bild Allgemeine Java-Themen 1
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
E Bild abspeichern Allgemeine Java-Themen 5
D Face.com - Gesicht im Bild finden Allgemeine Java-Themen 3
N Input/Output Bild von WebSite laden? Allgemeine Java-Themen 3
A Input/Output Bild in Java einlesen und analysieren! Allgemeine Java-Themen 8
S programm um bild auszulesen Allgemeine Java-Themen 2
R Bild offenbar zu groß um geladen zu werden? Allgemeine Java-Themen 12
K Quadrat in einem Bild erkennen Allgemeine Java-Themen 33
B Bild verschieben Allgemeine Java-Themen 6
T Bild in jar Paket einbinden Allgemeine Java-Themen 9
D Bild Typ bestimmen Allgemeine Java-Themen 9
0 2D-Grafik Bild einfärben Allgemeine Java-Themen 8
A Bild zusammenbauen! Allgemeine Java-Themen 5
A Bild von Webcam aufzeichnen Allgemeine Java-Themen 14
V 2D-Grafik Bild transparent machen. Allgemeine Java-Themen 4
E Bild mit Listener einfügen Allgemeine Java-Themen 3
B Bild in String einbauen? Allgemeine Java-Themen 3
C Bild auf HDD speichern Allgemeine Java-Themen 4
X Bild aus dem Netz von URL runterladen und in GUI einbinden. Allgemeine Java-Themen 3
F Bild (Point) mit scrollen lassen Allgemeine Java-Themen 5
R Texterkennung - Text aus einem/r Bild/Grafik auslesen Allgemeine Java-Themen 2
B Bild- und Texterkennung Allgemeine Java-Themen 4
S Tracing eines Bildes (a.ka. Bild vektorisieren)..? Allgemeine Java-Themen 2
destroflyer *.dds-Bild anzeigen Allgemeine Java-Themen 12
F Bild aus externer Quelle laden und Skalieren? Allgemeine Java-Themen 11
X Bild im Memory zwischen speichern Allgemeine Java-Themen 11
R JAI - RGB Bild in 3 Einzelbilder zerlegen Allgemeine Java-Themen 4
P Ascii Bild aus einem input file nur kommt nix im outputfile an?????? Allgemeine Java-Themen 5
A Möglichkeiten, ein Bild schnell auszuwerten Allgemeine Java-Themen 56
D Java Thread, Bild wird nur am Ende gezeichnet Allgemeine Java-Themen 5
K Zeichnen auf ein Bild und Scrollen Allgemeine Java-Themen 7
data89 Barcodes in Bild erkennen Allgemeine Java-Themen 17
S Bild anhand von Koordinaten einteilen Allgemeine Java-Themen 7
K Transparente Bilder in Bild positionieren und speichern. Allgemeine Java-Themen 5
W Bild Spiegeln, aber Originalbild ausblenden Allgemeine Java-Themen 2
B Bild wird nicht angezeigt. Allgemeine Java-Themen 10
Developer_X Avatar/Bild ins Profil einbinden Allgemeine Java-Themen 10
C Bild in .txt speichern und wieder als Bild speichern Allgemeine Java-Themen 2
D Bild in text tabelle umwandeln Allgemeine Java-Themen 2
G bild in package Allgemeine Java-Themen 6
MQue bild zoomen Allgemeine Java-Themen 2
R Farbe im Bild ersetzen Allgemeine Java-Themen 11
R PDF einlesen und als Bild abspeichern Allgemeine Java-Themen 8
P Bild aus dem Internet speichern Allgemeine Java-Themen 4
K Schreiben von Bildern: Bild bleibt leer Allgemeine Java-Themen 7
ARadauer Bild verkleinern. Allgemeine Java-Themen 9
F Bild (File) komplett serialisieren Allgemeine Java-Themen 9
H Wie erstelle ich ein Bild ( GeoTIFF ) ? Allgemeine Java-Themen 2
Ark Bild immer als ARGB laden Allgemeine Java-Themen 2
N Hochgeladenes Bild verkleinern und speichern Allgemeine Java-Themen 2
N Graphics2D als Bild abspeichern Allgemeine Java-Themen 6
M bild verkleinern Allgemeine Java-Themen 9
MQue svg- Bild Allgemeine Java-Themen 34
S JPEG Bild übertragen mit RMI ? Allgemeine Java-Themen 4
V Wie kann ich ein Bild in einem Zip Archiv abspeichern? Allgemeine Java-Themen 3
ToNyXXL Als Mauszeiger eigenes Bild verwenden! Allgemeine Java-Themen 3
M bild erkennung Allgemeine Java-Themen 2
S Bild durchs Label laufen Allgemeine Java-Themen 14
T Bild verliert Inhalt. Allgemeine Java-Themen 6
T Icon -> Bild einladen Allgemeine Java-Themen 18
G Bild neu zeichnen Allgemeine Java-Themen 13
S Bild Größe verändern Allgemeine Java-Themen 2
R Bild flackert nach Java-Install - nur bei Laufschriften. Allgemeine Java-Themen 2
H Bild base64encode als String Allgemeine Java-Themen 9
S Bild aus Zwischenablage in Applet einfügen Allgemeine Java-Themen 2
T Ich bin unfähig ein Bild relativ zu addressieren ... Allgemeine Java-Themen 12
D JPEGEncoder -> Schwarz Weiß Bild Allgemeine Java-Themen 2
M Eingelesene Bild wird automatisch skaliert Allgemeine Java-Themen 4
R Bild wird trotz allem einfach nicht angezeigt. - AHHHHH!!!!! Allgemeine Java-Themen 30
R Bild downloaden und darstellen lassen Allgemeine Java-Themen 5
R Bild downloaden und dann Applet ausfüllen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben