Hello,
I have a RESTful API that returns a pixel array from MATLAB. I convert this into a java image and pass it to a paintable canvas. However, the paintable canvas output looks pixelated compared to the original image. How can I improve the image?
The API code looks like this (After the API returns the IMG pixel array of size IMGSize):
Img=[[[0, 0, 0] for i in range(IMGSize[1])] for j in range(IMGSize[0])]
n=-1
for k in range(IMGSize[2]):
for j in range(IMGSize[1]):
for i in range(IMGSize[0]):
n+=1
Img[i][j][k]=IMG[n]
image = BufferedImage(560, 420, BufferedImage.TYPE_INT_RGB);
raster = image.getData();
sm = raster.getSampleModel();
writeRaster = Raster.createWritableRaster(sm,Point(0,0))
for i in range(560):
for j in range(420):
for k in range(3):
writeRaster.setSample(i, j, k, Img[j][i][k])
image.setData(writeRaster);
imageBytes=ByteArrayOutputStream()
ImageIO.write(image, "jpg", imageBytes)
imageBytes=imageBytes.toByteArray()
event.source.parent.getComponent('Figure').putClientProperty('Picture',imageBytes)
The paintable canvas code looks like this:
from java.io import ByteArrayInputStream
from javax.imageio import ImageIO
bytes = event.source.getClientProperty("Picture")
if bytes:
image = ImageIO.read(ByteArrayInputStream(bytes))
canvasW = event.width
canvasH = event.height
imageW = image.getWidth()
imageH = image.getHeight()
print(imageW,imageH)
scaleX = (canvasW-1.0) / imageW
scaleY = (canvasH-1.0) / imageH
# event.graphics.drawImage(image,0,0,event.source)
g = event.graphics
g.scale(scaleX, scaleY)
g.drawImage(image,0,0,event.source)
The original image looks like this:
The paintable canvas image looks like this: