From a258c2a6ae7a421c71033b76896e33b012099e72 Mon Sep 17 00:00:00 2001
From: chehaoc <chehao.chang@student.unimelb.edu.au>
Date: Thu, 24 Oct 2019 03:17:04 +1100
Subject: [PATCH] fix drawing bug
---
src/GUI/DrawingArea.java | 28 ++----------------
src/GUI/SerializableImage.java | 46 ------------------------------
src/remote/IDrawingController.java | 3 +-
src/server/DrawingController.java | 30 +++++++++----------
4 files changed, 17 insertions(+), 90 deletions(-)
delete mode 100644 src/GUI/SerializableImage.java
diff --git a/src/GUI/DrawingArea.java b/src/GUI/DrawingArea.java
index 9e80b51..c1f7a65 100644
--- a/src/GUI/DrawingArea.java
+++ b/src/GUI/DrawingArea.java
@@ -52,9 +52,6 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
setBackground(Color.WHITE); // Set Background color
setDoubleBuffered(false); // Non-buffered drawing
image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
- g2 = (Graphics2D) image.getGraphics();
- /// Antialiasing the graphic for smoothness ///
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
shapeColor = new Color(0, 0, 0);
currentMode = Mode.FREEHAND;
strokeSize = 3;
@@ -97,8 +94,6 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
public void clear() {
image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
- g2 = (Graphics2D) image.getGraphics();
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
repaint();
}
@@ -144,22 +139,6 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
}
}
-// public void saveFile() {
-// try {
-// ImageIO.write(image, "PNG", new File("Saved_White_Board.png"));
-// } catch (IOException e) {
-// e.printStackTrace();
-// }
-// }
-
- public void saveAsFile(File file) {
- try {
- ImageIO.write(image, "PNG", file);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
public void openFile(File file) {
try {
image = ImageIO.read(file);
@@ -243,6 +222,8 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
@Override
public void mousePressed(MouseEvent e) {
+ g2 = (Graphics2D) image.getGraphics();
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
startPoint = previousPoint = e.getPoint();
/// Instantiate object based on current mode ///
@@ -299,9 +280,6 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
default:
break;
}
-
- g2 = (Graphics2D) image.getGraphics();
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(shapeColor);
/// This repaint is needed if we want to fill the drawing shape with color
@@ -357,7 +335,7 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
/// Eraser is continuously drawing "small white circle" from current point to previous point ///
case ERASE:
- ((Ellipse2D) drawing).setFrame(currentPoint.getX(), currentPoint.getY(), eraserSize, eraserSize);
+ ((Ellipse2D) drawing).setFrame((currentPoint.getX() - (eraserSize / 2)), (currentPoint.getY() - (eraserSize / 2)), eraserSize, eraserSize);
g2.setColor(Color.WHITE);
g2.fill(drawing);
g2.draw(drawing);
diff --git a/src/GUI/SerializableImage.java b/src/GUI/SerializableImage.java
deleted file mode 100644
index 10ddffd..0000000
--- a/src/GUI/SerializableImage.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package GUI;
-
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.WritableRaster;
-import java.io.*;
-import java.util.Hashtable;
-
-public class SerializableImage extends BufferedImage implements Serializable {
-
- transient BufferedImage image;
-
- public SerializableImage(int width, int height, int imageType) {
- super(width, height, imageType);
- image = new BufferedImage(width, height, imageType);
- }
-
- public BufferedImage getImage() {
- return image;
- }
-
- public void setImage(BufferedImage image) {
- this.image = image;
- }
-
- public SerializableImage(int width, int height, int imageType, IndexColorModel cm) {
- super(width, height, imageType, cm);
- }
-
- public SerializableImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable<?, ?> properties) {
- super(cm, raster, isRasterPremultiplied, properties);
- }
-
-
- public void writeObject(ObjectOutputStream output) throws IOException {
- output.defaultWriteObject();
- ImageIO.write(image, "png", output);
- }
-
- public void readObject(ObjectInputStream input) throws IOException, ClassNotFoundException {
- input.defaultReadObject();
- image = ImageIO.read(input);
- }
-}
diff --git a/src/remote/IDrawingController.java b/src/remote/IDrawingController.java
index 635c490..df06261 100644
--- a/src/remote/IDrawingController.java
+++ b/src/remote/IDrawingController.java
@@ -1,6 +1,6 @@
package remote;
-import GUI.SerializableImage;
+
import client.Client;
import java.awt.*;
@@ -33,7 +33,6 @@ public interface IDrawingController extends Remote {
ArrayList<Font> getFontList() throws RemoteException;
ArrayList<Point> getTextStartPointList() throws RemoteException;
// BufferedImage getCurrentImage() throws RemoteException;
- SerializableImage getCurrentImage() throws RemoteException;
void getImage(String fromClient) throws RemoteException;
}
diff --git a/src/server/DrawingController.java b/src/server/DrawingController.java
index d52aebe..f48100e 100644
--- a/src/server/DrawingController.java
+++ b/src/server/DrawingController.java
@@ -1,15 +1,11 @@
package server;
-import GUI.SerializableImage;
-import client.Client;
import remote.IDrawingController;
import remote.IDrawingUpdate;
-import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
-import java.lang.reflect.Array;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
@@ -20,7 +16,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
private final static int AREA_HEIGHT = 600;
private Server server;
- private SerializableImage serializableImage;
+// private SerializableImage bufferedImage;
private BufferedImage bufferedImage;
private Graphics2D g2;
@@ -40,8 +36,8 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
// g2 = (Graphics2D) bufferedImage.getGraphics();
// g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- this.serializableImage = new SerializableImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
- g2 = (Graphics2D) serializableImage.getGraphics();
+ this.bufferedImage = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
+ g2 = (Graphics2D) bufferedImage.getGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -63,10 +59,10 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
textStartPointList.add(startPoint);
- g2 = (Graphics2D) serializableImage.getGraphics();
+ g2 = (Graphics2D) bufferedImage.getGraphics();
g2.setFont(font);
g2.drawString(text, startPoint.x, startPoint.y);
- g2 = (Graphics2D) serializableImage.getGraphics();
+ g2 = (Graphics2D) bufferedImage.getGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -94,7 +90,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
colorList.add(color);
strokeSizeList.add(strokeSize);
- g2 = (Graphics2D) serializableImage.getGraphics();
+ g2 = (Graphics2D) bufferedImage.getGraphics();
switch (mode) {
case "OVAL":
case "RECTANGLE":
@@ -111,7 +107,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
default:
break;
}
- g2 = (Graphics2D) serializableImage.getGraphics();
+ g2 = (Graphics2D) bufferedImage.getGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(color);
@@ -141,7 +137,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
strokeSizeList.add(strokeSize);
}
- g2 = (Graphics2D) serializableImage.getGraphics();
+ g2 = (Graphics2D) bufferedImage.getGraphics();
switch (mode) {
case "FREEHAND":
g2.setColor(color);
@@ -158,7 +154,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
default:
break;
}
- g2 = (Graphics2D) serializableImage.getGraphics();
+ g2 = (Graphics2D) bufferedImage.getGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(color);
@@ -208,16 +204,16 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
return true;
}
- public SerializableImage getCurrentImage() throws RemoteException {
- return serializableImage;
+ public BufferedImage getCurrentImage() throws RemoteException {
+ return bufferedImage;
}
public void getImage(String fromClient) throws RemoteException {
-// if (serializableImage.getImage().)
+// if (bufferedImage.getImage().)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IDrawingUpdate client;
try {
- javax.imageio.ImageIO.write(serializableImage, "png", baos);
+ javax.imageio.ImageIO.write(bufferedImage, "png", baos);
baos.flush();
}
catch (IOException err) {
--
GitLab