たまりば

教育をメインに幅広いテーマで本の紹介,感じたことなど様々な情報を流して共有していく.文章中心の飾らないブログ.

送信をいかに素早く行うか

画像をマルチキャストで複数に送るものを作っています.そこでなるべく信頼性を保ちながらできるだけ早く送信を完了したいと思っています.

今までは受信側でUIに合うよう受信画像をリサイズしていたのですが,送信側ではじめに縮小しちゃえばその分送るデータサイズも小さくなるじゃんと友人に気づかされ修正.

BufferedImage readImage = ImageIO.read(openFile);  // 別のクラスでFileのopenFileを取得している
double ratio_image = (double) readImage.getWidth() / readImage.getHeight();  // 元の画像の横/縦
double ratio_panel = (double) panel_width / panel_height;  // 表示するエリアのサイズの横/縦
if(readImage.getWidth() <= panel_width && readImage.getHeight() <= panel_height) {  // エリアをはみ出さない小さい画像の場合そのまま、大きい場合縮小
     image = readImage;
}else {
     if(ratio_image > ratio_panel) {  // 16:9よりも横長の場合、横にあわせる  
          image = readImage.getScaledInstance(panel_width, -1, Image.SCALE_DEFAULT);
     }else {
          image = readImage.getScaledInstance(-1, panel_height, Image.SCALE_DEFAULT);
     }
     bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
     Graphics2D g = bufferedImage.createGraphics();
     g.drawImage(image, 0, 0, null);
     g.dispose();
}

これを今までは受信側で行ってたのを送信側に移植. 容量が小さくなって送信も早くなりました. ただ,送信時のフォーマットで今まではbmpでできてたのにpngとかにしないと 画像データを配列に直した時正しく格納されないのが不思議.

修正コメントも募集中です @tjd5gtmd8wtjpp