我可以成功發送並從我的客戶端向我的服務器繪製調整大小的125 x 125圖像。唯一的問題是,這太小了。我想能夠發送更大的圖像,但字節數組無法處理它,我得到一個Java堆異常。目前我正在使用它來解釋我的圖像。有沒有更高效的方法?以客戶端和服務器之間的字節數組形式發送圖像
在客戶
screenShot = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
screenShot = resize(screenShot, 125, 125);
ByteArrayOutputStream byteArrayO = new ByteArrayOutputStream();
ImageIO.write(screenShot,"PNG",byteArrayO);
byte [] byteArray = byteArrayO.toByteArray();
out.writeLong(byteArray.length);
out.write(byteArray);
大小調整方法與上述調用。解譯圖像
in = new DataInputStream(Client.getInputStream());
long nbrToRead = in.readLong();
byte[] byteArray = new byte[(int) nbrToRead];
int nbrRd = 0;
int nbrLeftToRead = (int) nbrToRead;
while (nbrLeftToRead > 0) {
int rd = in.read(byteArray, nbrRd, nbrLeftToRead);
if (rd < 0)
break;
nbrRd += rd; // accumulate bytes read
nbrLeftToRead -= rd;
}
ByteArrayInputStream byteArrayI = new ByteArrayInputStream(
byteArray);
image = ImageIO.read(byteArrayI);
if (image != null) {
paint(f.getGraphics(), image);
} else {
System.out.println("null image.");
}
,你可以告訴代碼是巨大的,最有可能低效
public static BufferedImage resize(BufferedImage img, int newW, int newH) {
int w = img.getWidth();
int h = img.getHeight();
BufferedImage dimg = new BufferedImage(newW, newH, img.getType());
Graphics2D g = dimg.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);
g.dispose();
return dimg;
}
服務器。我可以發送10次圖像的1/10用於和高度,而不是使用這些部分,但我想知道是否有更簡單的方法來完成此操作。
,我認爲這是與該 有點類似http://stackoverflow.com/questions/5113914/large-file-轉移帶,插座 –
這就是類似於我在做什麼,但我的字節數組是太強大,能夠處理任何事情>爲125x125 – user1729831
我試圖避免讀多件 – user1729831