Halli Hallo,
ich muss gerade eine Anwedung programieren, mit der man den Text, der auf einem Image steht
auslesen kann. Dies nur für eure Kenntnis.
Ich stehe aber nun noch ziemlich am Anfang und habe deahlb erst einmal 2 Fragen.
Frage1:
Meine shell ist in eine Linke Seite und eine Rechte Seite durch einen Sash unterteilt.
Beim start öffnet es ein neuen FileDialog und ich kann das Image auswählen.
Dies wird dann auf der rechten Seite in einem Canvas angezeigt. Nun meine Frage.
Gibt es eine Möglichkeit, das Bild mit dem Sash zu skalieren.
Anders gesagt, ich möchte, dass mein Bild kleiner wird,
wenn ich den Sash in Richtung des Images schiebe und größer wenn er sich davon entfernt.
Bisher ist es so geregelt, das ein ScrollBar erscheint, wenn ich den Sash ins Fenster hinein Bewege.
Für eine bessere Usability muss es jetzt über die Skalierung gehandhabt werden.
Frage2:
Bei dem Projekt geht es darum, Anträge und so zu digitalisieren und zu Überprüfen. Da so ein Antrag
ja auch aus mehreren Seiten Besteht, müsste ich auch mehrere Seiten in das Canvas laden.
Diese sollen dabei einfach untereinander aneinander gereit werden. Bei diesem Thema habe ich
allerdings nicht einmal ein Ansatz. Wie lade ich mehrere Bilder in das Canvas?
Hier mal der Code der bis jetzt verwendet wird:
(Der vertikale Scrollbalken ist bereits auskommentiert, da ich ihn ja theoretisch nicht mehr brauche,
wenn das Bild skalliert wird)
ich muss gerade eine Anwedung programieren, mit der man den Text, der auf einem Image steht
auslesen kann. Dies nur für eure Kenntnis.
Ich stehe aber nun noch ziemlich am Anfang und habe deahlb erst einmal 2 Fragen.
Frage1:
Meine shell ist in eine Linke Seite und eine Rechte Seite durch einen Sash unterteilt.
Beim start öffnet es ein neuen FileDialog und ich kann das Image auswählen.
Dies wird dann auf der rechten Seite in einem Canvas angezeigt. Nun meine Frage.
Gibt es eine Möglichkeit, das Bild mit dem Sash zu skalieren.
Anders gesagt, ich möchte, dass mein Bild kleiner wird,
wenn ich den Sash in Richtung des Images schiebe und größer wenn er sich davon entfernt.
Bisher ist es so geregelt, das ein ScrollBar erscheint, wenn ich den Sash ins Fenster hinein Bewege.
Für eine bessere Usability muss es jetzt über die Skalierung gehandhabt werden.
Frage2:
Bei dem Projekt geht es darum, Anträge und so zu digitalisieren und zu Überprüfen. Da so ein Antrag
ja auch aus mehreren Seiten Besteht, müsste ich auch mehrere Seiten in das Canvas laden.
Diese sollen dabei einfach untereinander aneinander gereit werden. Bei diesem Thema habe ich
allerdings nicht einmal ein Ansatz. Wie lade ich mehrere Bilder in das Canvas?
Hier mal der Code der bis jetzt verwendet wird:
(Der vertikale Scrollbalken ist bereits auskommentiert, da ich ihn ja theoretisch nicht mehr brauche,
wenn das Bild skalliert wird)
Java:
SashForm sashForm = new SashForm(shell, SWT.HORIZONTAL);
sashForm.setVisible(true);
Composite linkeSpalte = new Composite(sashForm, SWT.None);
linkeSpalte.setLayout(new FillLayout(SWT.NONE));
linkeSpalte.setBackground(new Color(display, 31, 133, 31));
//Bild laden
Image orginalImage = null;
FileDialog FD = new FileDialog(shell, SWT.NONE);
FD.setText("Pfad angeben");
String string = FD.open();
if (string != null)
{
orginalImage = new Image(display, string);
}
if (string == null)
{
int width = 150, height = 200;
orginalImage = new Image (display, width, height);
GC gc = new GC (orginalImage);
gc.fillRectangle(0, 0, width, height);
gc.drawLine(0, 0, width, height);
gc.drawLine(0, height, width, 0);
gc.drawText("Image not FOUND", 0, 0);
gc.dispose();
}
final Image image = orginalImage;
final Point origin = new Point (0, 0);
final Canvas canvas = new Canvas (linkeSpalte, SWT.NO_BACKGROUND | SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL);
//Horizontal Scroll -> Canvas
/*
final ScrollBar CanvasScrollH = canvas.getHorizontalBar();
CanvasScrollH.addListener
(SWT.Selection, new Listener()
{
public void handleEvent (Event e)
{
int hSelection = CanvasScrollH.getSelection();
int destX = -hSelection - origin.x;
Rectangle rectangle = image.getBounds();
canvas.scroll(destX, 0, 0, 0, rectangle.width, rectangle.height, false);
origin.x = -hSelection;
}
}
);
*/
//Vertical Scroll -> Canvas
final ScrollBar CanvasScrollV = canvas.getVerticalBar();
CanvasScrollV.addListener
(SWT.Selection, new Listener()
{
public void handleEvent (Event e)
{
int vSelection = CanvasScrollV.getSelection();
int destY = -vSelection - origin.y;
Rectangle rectangle = image.getBounds();
canvas.scroll(0, destY, 0, 0, rectangle.width, rectangle.height, false);
origin.y = -vSelection;
}
}
);
canvas.addListener (SWT.Resize, new Listener () {
public void handleEvent (Event e) {
Rectangle rect = image.getBounds ();
Rectangle client = canvas.getClientArea ();
//CanvasScrollH.setMaximum (rect.width);
CanvasScrollV.setMaximum (rect.height);
//CanvasScrollH.setThumb (Math.min (rect.width, client.width));
CanvasScrollV.setThumb (Math.min (rect.height, client.height));
int hPage = rect.width - client.width;
int vPage = rect.height - client.height;
//int hSelection = CanvasScrollH.getSelection ();
int vSelection = CanvasScrollV.getSelection ();
/*
if (hSelection >= hPage) {
if (hPage <= 0) hSelection = 0;
origin.x = -hSelection;
}
*/
if (vSelection >= vPage) {
if (vPage <= 0) vSelection = 0;
origin.y = -vSelection;
}
canvas.redraw ();
}
});
canvas.addListener (SWT.Paint, new Listener () {
public void handleEvent (Event e) {
GC gc = e.gc;
gc.drawImage (image, origin.x, origin.y);
Rectangle rect = image.getBounds ();
Rectangle client = canvas.getClientArea ();
int marginWidth = client.width - rect.width;
if (marginWidth > 0) {
gc.fillRectangle (rect.width, 0, marginWidth, client.height);
}
int marginHeight = client.height - rect.height;
if (marginHeight > 0) {
gc.fillRectangle (0, rect.height, client.width, marginHeight);
}
}
});