46 lines
1.2 KiB
Scala
46 lines
1.2 KiB
Scala
import scala.io._
|
|
import scala.swing._
|
|
import java.io._
|
|
import java.awt.Color
|
|
import javax.swing.ImageIcon
|
|
|
|
object Pixmap {
|
|
private case class PpmHeader(format:String, width:Int, height:Int, maxColor:Int)
|
|
|
|
def load(filename:String):Option[RgbBitmap]={
|
|
implicit val in=new BufferedInputStream(new FileInputStream(filename))
|
|
val header=readHeader
|
|
if(header.format=="P6")
|
|
{
|
|
val bm=new RgbBitmap(header.width, header.height);
|
|
for(y <- 0 until bm.height; x <- 0 until bm.width; c=readColor)
|
|
bm.setPixel(x, y, c)
|
|
return Some(bm)
|
|
}
|
|
None
|
|
}
|
|
|
|
private def readHeader(implicit in:InputStream)={
|
|
var format=readLine
|
|
|
|
var line=readLine
|
|
while(line.startsWith("#")) //skip comments
|
|
line=readLine
|
|
|
|
val parts=line.split("\\s")
|
|
val width=parts(0).toInt
|
|
val height=parts(1).toInt
|
|
val maxColor=readLine.toInt
|
|
|
|
new PpmHeader(format, width, height, maxColor)
|
|
}
|
|
|
|
private def readColor(implicit in:InputStream)=new Color(in.read, in.read, in.read)
|
|
|
|
private def readLine(implicit in:InputStream)={
|
|
var out=""
|
|
var b=in.read
|
|
while(b!=0xA){out+=b.toChar; b=in.read}
|
|
out
|
|
}
|
|
}
|