![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 13.08.2005
Beiträge: 67
|
Hi, gibt es eine einfache Komponente mit der ich ein jpg Bild anzeigen kann und dann auf einfache Weise (Rahmen wie Bildverarbeitung) einen Ausschnitt wählen kann? Möchte ein Bild laden und den Ausschnitt speichern. Das Ändern der Größe dürfte weniger schwer werden. Aber wie realisiere ich den Rahmen über dem Bild den ich auch noch mit der Maus zurechtschieben kann? |
| | |
| | Nach oben #2 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Ich glaub ich nenn jetzt nur ein paar Stichpunkte: - JLabel + ImageIcon - MouseListener + MouseMotionListener (mousePressed, mouseDragged, mouseReleased) - JPanel + JLayeredPane Das ausschneiden machst du dann mit der entsprechenden Graphik-API.
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #3 |
| Benutzer Registriert seit: 13.08.2005
Beiträge: 67
|
Soweit alles klar, nur wo ich etwas kämpfe ist den Rahmen zeichnen und verschieben,..... Will das Rad nicht neu erfinden und vermute dass es eine Kopmonente geben dürfte die ähnliches kann. Einfach um mal einen ANsatz zu sehen der funktioniert. |
| | |
| | Nach oben #4 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.110
|
Es gibt keine Klasse, die das macht. Jedenfalls kenne ich keine. Hier hast du'n Beispiel (ungetestet Code: import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DragPanel extends JPanel {
private Rectangle rect;
public DragPanel() {
super(null);
MouseHandler handler = new MouseHandler();
addMouseListener(handler);
addMouseMotionListener(handler);
setOpaque(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(new Color(0xA09999DD));
g.fillRect(rect);
g.setColor(new Color(0xA0000052));
g.drawRect(rect);
}
private class MouseHandler implements MouseListener, MouseMotionListener {
private boolean dragRectangle = false;
private Point lastPoint;
public void mousePressed(MouseEvent e) {
// there is already a rectangle
if(rect != null) {
// we want to drag this one
if(rect.contains(e.getPoint())) {
dragRectangle = true;
return;
// we're not going to drag it
} else {
dragRectangle = false;
rect = null;
}
}
// by now there won't be a rectangle
lastPoint = e.getPoint();
rect = new Rectangle(lastPoint.x, lastPoint.y, 1, 1);
repaint();
}
public void mouseDragged(MouseEvent e) {
Point currentPoint = e.getPoint();
// dragging?
if(dragRectangle) {
rect.x += lastPoint.x - currentPoint.x;
rect.y += lastPoint.y - currentPoint.y;
} else {
// Ok, we're changing its size
rect.width = rect.x - currentPoint.x;
rect.height = rect.y - currentPoint.y;
// the above code might introduce troubles
if(rect.width < 0) {
rect.x = rect.x + rect.width;
rect.width = -rect.width;
}
if(rect.height < 0) {
rect.y = rect.y + rect.height;
rect.height = -rect.height;
}
}
// store point
lastPoint = currentPoint;
repaint();
}
// other methods
}
}
__________________ Patrick Gotthardts Weblog. |
| | |
| | Nach oben #6 |
| Benutzer Registriert seit: 13.08.2005
Beiträge: 67
|
Morsche. Ich habe deinen Code mal geteste und abgesehen von ein paar vertauschten Subtraktionen hat es geklappt. War ja ungetestet. SUPER SACHE!!!!! Habe dann die Bildfunktionalität integriert und eine Funktion geschrieben mit der man einen Bildausschnitt erreichen kann. Was mir nicht gefallen hat war dass dieses 1x1 Pixel Rechteck angezeigt wurde. Das habe ich deshalb ausgeklammert. (NULL darf es ja nicht sein). Jetzt habe ich nur noch zwei Punkte an denen ich hänge: 1. (Da hatte ich einfach noch keine Zeit) Es ist unschön dass wenn ich die Auswahl verschieben will das er den aktuellen Punkt zur linken unteren Ecke macht. Das bekomme ich aber hin wenn ich die Zeit finde. 2. Wenn ich den Bildausschnitt mache und repaint aufrufe ist mein "image" nicht sichtbar. Wenn ich die Dimensionen width und height ausgebe so sind beide -1. Wird die Komponente dann erneut gezeichnet weil ich z.B. mit der Maus in das Panel klicke dann erscheint das Bild wie vorgesehen (richtig zugeschnitten). die Referenz "image" ist nicht null, das habe ich getestet. Ich poste gleich noch einen Testframe, dann wird es wohl leichter nachzubauen. Die DragPanel Klasse PHP-Code: (verwendet JGoodsies Forms) PHP-Code: |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |