Skaliertes Image pixelweise bearbeiten

Atze

Top Contributor
hat schon jemand mal was paint-artiges in java geschrieben? stehe momentan vor dem problem, dass ich ein kleines image (64x32 px) mit einer grafischen oberfläche bearbeiten muss. pixelweise bearbeiten ist ja nicht das problem. allerdings ist 64x32 sehr winzig, daher sollte es gezoomt werden. wenn ich es skaliere (bspw x10) sieht mans besser, aber aus einem pixel werden logischerweise 10. später im ergebnis möchte ich aber nur das originale, einzelne pixel haben.

also bleibt wohl nur für die oberfläche in 10-facher größe anzeigen, bearbeiten und beim speichern wieder runterrechnen. soweit klar, aber wie zeige ich das an, bzw komme mit der oberfläche am einfachsten an einzelne pixel. wenn man sich bilder mit photoshop zoomed, wird aus dem 1px großen stift ein retangle, welches die "echten" pixel in einer art raster abläuft. muss ich mir das selbst bauen? oder gibts da irgendwas fertiges? wenn selber bauen, dann wie am besten? einzelne panels mit listenern (64x32 stück)? oder nen transparenten layer mit nem raster drüber und über die koordinaten gehen?
ich hoffe ihr könnt das problem nachvollziehen!? :) ist schwer in worte zu fassen, daher auch schwer was im netz zu finden.
 

Atze

Top Contributor
was los? keiner ne meinung? zu trivial? oder hat das noch niemand gemacht? :/

*edit:*

da noch niemand was dazu sagen konnte, hier nochmal ein screenshot um das problem irgendwie deutlicher zu machen. vielleicht hab ich's einfach zu umständlich erklärt, kann mir irgendwie nicht vorstellen, dass noch niemand sowas gebraucht haben soll. ich möchte ein bild einfach zoomen und die pixel über ein raster ansprechen (siehe screenshot aus gimp), so wie es jedes gängige grafikprogramm beim heranzoomen auch tut. gibt es bereits was fertiges? nen jcolorchooser gibts ja auch, ist ja thematisch nicht weit auseinander, oder? :) falls ich mir das selber bauen muss - also bei nem beispiel-zoomfaktor 10 statt eines einzelnen pixel malen, ein rechteck von 10 x 10 pixeln zu zeichnen wäre ja nicht das problem. aber dies sollte eben rasterweise geschehen. wie würdet ihr das umsetzen?
 

Anhänge

  • bsp.jpg
    bsp.jpg
    2,4 KB · Aufrufe: 33
Zuletzt bearbeitet:

Atze

Top Contributor
habs jetzt ein paar tage liegen lassen und hab mir nun folgendes überlegt:
- das vergrößerte originalbild (640x320) in die anzahl an ursprünglichen pixeln teilen (64x32)
- die einzelnen images auf panels zeichnen und diese "bildfelder" (10x10) auf clicks reagieren lassen, dabei für die oberfläche färben und den farbwert merken
- zuletzt einfach die farbwerte der einzelnen panels (in originalgröße, also 64x32 - für jedes panel einen pixel) zeichnen und speichern

jemand einwände? verbesserungsvorschläge? alternative ansätze? :)
 

Marco13

Top Contributor
Hatte den Thread gar nicht gesehen.

Wenn man das Bild vergrößert zeichnet (also mit graphics2d.scale(10,10) ) dann könnte das dem gewünschten Aussehen schon recht nahe kommen. Evtl. muss man sowas wie Filtering (LINEAR, BILINEAR etc) explizit AUSschalten, damit er nicht versucht, die riesen-Pixel weichzumatschen.

Dann sollte man in einfachsten Fall die Koordinaten aller MouseEvents durch 10 teilen können, um an der richtigen Stelle zu landen. Zwei mögliche Probleme kommen mir in den Sinn: Man muss eine Verschiebung reinrechnen, wenn man nur einen bestimmten Bildausschnitt sehen will. Diese Verschiebung in die Mauskoordinaten mit reinzurechnen könnte ein bißchen fummelig werden, aber sollte machbar sein.
Dabei könnte es bei hohen Skalierungen Probleme mit der Genauigkeit geben, aber 10x10 sollte noch ohne größere Fehler gehen. Ansonsten ... wenn das nicht funzt, müßte man im schlimmsten Fall eine Art "Pixel-Editor" erstellen, das könnte dann aufwändiger werden.
 

Atze

Top Contributor
versteh ich dich falsch oder reden wir aneinander vorbei? :(

sollte recht simpel werden, um die richtige skalierung (so wie ich deine antwort verstanden habe) mach ich mir keine sorgen. es soll nicht dynamisch mehrere wählbare skalierungen geben, und der user soll das auch nicht manuell durchführen. beim laden soll das original (64x32) auf 640x320 "gezoomt" werden, hab jetzt einfach mal den faktor 10 gewählt weils dann gut sichtbar ist und sich einfach rechnen lässt. hätte auch x12 oder x15 sein können, aber wird dann auch zu groß.

jedenfalls wird das sofort einmalig vergrößert, um das bearbeiten der pixel zu erleichtern. 64x32 ist einfach zu klein dafür. auf der 640x320 großen oberfläche will ich dann aber die pixel mit einem raster so handlen, als ob es die ursprünglichen 64x32 pixel wären, also nur 64x32 felder. (so wie photoshop halt jedes bild zoomt und der gewählte pinsel dann auch entsprechend dicker wird, also mehr pixel gleichzeitig färbt)

jetzt ist nur die frage, wie bekomm ich da am einfachsten ne "durchsichtige" matrix drüber? ich dachte halt einfach an ein 64x32 mosaik aus jeweils 10x10 großen panels mit dem jeweiligen vervielfachten pixel. jedes panel sollte dann halt mit nem mouseover nen schraffierten rahmen haben und sich beim klick mit der gewählten farbe aus dem colorchooser füllen. die farbe merk ich mir und bei speicher bekommt halt nur das ensprechende kleine pixel aus dem 64x32 die farbe. das bild wird halt wieder aus den farben der panels zusammengesetzt

so, viel erklärt für wenig content, aber hoffe ist verständlicher :)
 

Marco13

Top Contributor
Vielleicht fehlt mir das Einfühlungsvermögen in die intention des Aufgabenstellers...

Aber lass' das mit den Panels mal. Klingt murksig.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import java.awt.geom.*;
import javax.imageio.*;
import java.io.*;

class IconPaintPanel extends JPanel implements MouseListener, MouseMotionListener
{
    private BufferedImage image;
    private int scaling = 10;
    private int currentX = 0;
    private int currentY = 0;

    public IconPaintPanel(BufferedImage image)
    {
        this.image = image;
        addMouseListener(this);
        addMouseMotionListener(this);
    }

    @Override
    protected void paintComponent(Graphics gr)
    {
        super.paintComponent(gr);
        Graphics2D g = (Graphics2D)gr;
        AffineTransform oldAT = g.getTransform();
        g.scale(scaling, scaling);

        g.drawImage(image,0,0,this);

        g.setTransform(oldAT);

        g.setColor(Color.RED);

        int snapX = ((int)(currentX/scaling))*scaling;
        int snapY = ((int)(currentY/scaling))*scaling;

        g.drawRect(snapX, snapY, scaling, scaling);

    }

    @Override
    public void mouseMoved(MouseEvent e)
    {
        currentX = e.getX();
        currentY = e.getY();
        repaint();
    }

    @Override
    public void mouseDragged(MouseEvent e)
    {
        currentX = e.getX();
        currentY = e.getY();
        repaint();
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
        int imageX = (int)(currentX/scaling);
        int imageY = (int)(currentY/scaling);
        image.setRGB(imageX, imageY, Color.RED.getRGB());
        repaint();
    }

    @Override
    public void mouseEntered(MouseEvent e){}
    @Override
    public void mouseExited(MouseEvent e){}
    @Override
    public void mousePressed(MouseEvent e){}
    @Override
    public void mouseReleased(MouseEvent e){}

}






class IconPaint
{
    public static void main(String args[]) throws Exception
    {
        final BufferedImage image = ImageIO.read(new File("bildB.jpg_tn.jpg"));


        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                IconPaintPanel p = new IconPaintPanel(image);
                f.getContentPane().add(p);
                f.setSize(400,400);
                f.setVisible(true);
            }
        });
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Skaliertes Bild wird rötlich eingefärbt AWT, Swing, JavaFX & SWT 2
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
Telisti Javafx Image wird nicht richtig integiert AWT, Swing, JavaFX & SWT 8
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
JMölleri Swing Image wird unscharf dargestellt AWT, Swing, JavaFX & SWT 2
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
kodela angezeigtes Image entfernen AWT, Swing, JavaFX & SWT 1
R Java, GUI, Hintergrundbild, Image, AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
S Stretch Image in ImageView AWT, Swing, JavaFX & SWT 4
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
L JavaFX Image mit Blureffect AWT, Swing, JavaFX & SWT 2
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
F javaxt.io.Image getBufferedImage liefert null AWT, Swing, JavaFX & SWT 1
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L JavaFX leeres weißes Image - javafx.scene.image.Image AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Naxon89 JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
B Graphics to Image AWT, Swing, JavaFX & SWT 3
L Image in anderes kopieren AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
I Image im PopupMenu vom SystemTray AWT, Swing, JavaFX & SWT 8
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
M JavaFX Image View Würfel berechnen AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
F Swing Image einem Button hinzufügen AWT, Swing, JavaFX & SWT 5
B Resize von Image nach Resize von Button AWT, Swing, JavaFX & SWT 1
T Image aus "nicht-src-ordner" AWT, Swing, JavaFX & SWT 5
vodkaz (javafx) Image Problem AWT, Swing, JavaFX & SWT 2
C Image laden und Speichern - Image wird auf JPanel nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Image in JTable einfügen AWT, Swing, JavaFX & SWT 9
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Image im Array per Knopfdruck ändern AWT, Swing, JavaFX & SWT 6
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
G JavaFX Image vergrößern AWT, Swing, JavaFX & SWT 5
U Image mit Zeichenbereich rotieren AWT, Swing, JavaFX & SWT 3
P Speicherproblem SWT.Image in Nebula-Gallery AWT, Swing, JavaFX & SWT 3
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
D JLabel Image ausrichten AWT, Swing, JavaFX & SWT 2
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
bluerob Problem beim Image zeichnen via andere Klasse AWT, Swing, JavaFX & SWT 7
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
I Image Button AWT, Swing, JavaFX & SWT 4
U IntBuffer zum Image konvertieren. AWT, Swing, JavaFX & SWT 9
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
K Swing Warum bleibt das Image immer gleich AWT, Swing, JavaFX & SWT 4
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
D Image.getScaledInstance() vs. Netzwerkverbindung??? AWT, Swing, JavaFX & SWT 2
reibi SWT Image viewer AWT, Swing, JavaFX & SWT 2
lumo SWT Image funktion auf ImageDaten AWT, Swing, JavaFX & SWT 9
A Applet .gif in applet Image nicht animiert angezeigt AWT, Swing, JavaFX & SWT 4
M Image wird nicht neugezeichnet nach dem Wechsel AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
P Image mehrfach in ein BufferedImage zeichnen AWT, Swing, JavaFX & SWT 7
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
P nicht sichtbares JPanel / JFrame als Image speichern AWT, Swing, JavaFX & SWT 3
T Image skaliert in Variable speichern AWT, Swing, JavaFX & SWT 6
S Image wird nicht (immer) in paintComponent gezeichnet? AWT, Swing, JavaFX & SWT 6
S Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 2
0 Mousecurser mit Image hinterlegen AWT, Swing, JavaFX & SWT 4
B Swing Drag&Drop mit Feedback (Image am Mauszeiger) AWT, Swing, JavaFX & SWT 7
N Java Choice Bilderausgabe - images - - image - AWT, Swing, JavaFX & SWT 2
D iText PdfPCell mit Image AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
S Button mit Image AWT, Swing, JavaFX & SWT 7
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
F SWT GC drawText auf halbtransparentem Image AWT, Swing, JavaFX & SWT 21
G Swing JEdtitorPane und HTML Image Seite AWT, Swing, JavaFX & SWT 2
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
C Image performant skalieren AWT, Swing, JavaFX & SWT 5
D SWT Image Farbtiefe AWT, Swing, JavaFX & SWT 2
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
lumo SWT Composite + Image + zeichnen AWT, Swing, JavaFX & SWT 4
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
Kr0e Image schärfen AWT, Swing, JavaFX & SWT 2
R Bild drehen UND skalieren (Image bzw BufferedImage) AWT, Swing, JavaFX & SWT 5
T Image auf Image zeichnen AWT, Swing, JavaFX & SWT 2
E Warum ist offscreen (mit Image) schneller? AWT, Swing, JavaFX & SWT 11
G Swing Image speichern / 0 Byte AWT, Swing, JavaFX & SWT 7
H Image abspeichern AWT, Swing, JavaFX & SWT 4
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
W Image in jar einbauen AWT, Swing, JavaFX & SWT 20
Luk10 AWT Image und die Skalierung! AWT, Swing, JavaFX & SWT 3
L JPanel als Image speichern AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben