日記
at 2011-5-30 0:25 | Comment(0)
Scalaで簡単な画像処理 [プログラム関係]
昨日のドット絵塗り絵会のあとに、二人の方にドット絵添削していただいたので
見比べるのが便利な用に、画像をくっつけてパレットも表示するような
アプリケーションを最近勉強してるScalaという言語で書いてみました。
適当に書いたソースコード。
型推論のおかげで、長ったらしいBufferedImageとかいちいち記述しなくていいのが便利。
import java.io.File import javax.imageio.ImageIO import java.awt.Color import java.awt.image.BufferedImage import java.awt.image.IndexColorModel val PALETTE_CELL_SIZE = 3 val PALETTE_SIZE = PALETTE_CELL_SIZE * 16 if(args.length < 2) { println("usage: scala unite.scala dist_image src_image...") exit } val images = args.tail.map(a => ImageIO.read(new File(a))) val width = images.map(a => a.getWidth).reduceLeft((a, b) => a.max(b)) + PALETTE_SIZE val height = images.map(a => a.getHeight.max(PALETTE_SIZE)) .reduceLeft((a, b) => a + b).max(PALETTE_SIZE) val resultImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB) var y = 0 val g2d = resultImage.createGraphics for (image <- images) { g2d.drawImage(image, 0, y, null) val palette = image.getColorModel if (palette.isInstanceOf[IndexColorModel]) { for (cy <- 0 to 16) for (cx <- 0 to 16) { g2d.setColor(new Color(palette.getRGB(cx+cy*16))) g2d.fillRect(width - PALETTE_SIZE + cx * PALETTE_CELL_SIZE, y + cy * PALETTE_CELL_SIZE, PALETTE_CELL_SIZE, PALETTE_CELL_SIZE) } } y += image.getHeight.max(PALETTE_SIZE) } g2d.dispose ImageIO.write(resultImage, "png", new File(args(0)))
at 2011-5-30 0:25 | Comment(0)
required 0.0334 sec