Scala – 最简单的2D图形,只需将2D数组写入屏幕即可?
发布时间:2020-12-16 19:19:42 所属栏目:安全 来源:网络整理
导读:您建议将2D像素阵列写入屏幕? 我的第一个想法是一些SWT绑定,但还有其他吗?处理也许? 解决方法 在Swing中不是太难 – 你可以剪切并粘贴下面的内容.如果您不想要颜色或绘制到任何大小窗口的能力,或者它总是相同的大小,您可以简化它. 定义Panel类: class Da
您建议将2D像素阵列写入屏幕?
我的第一个想法是一些SWT绑定,但还有其他吗?处理也许? 解决方法
在Swing中不是太难 – 你可以剪切并粘贴下面的内容.如果您不想要颜色或绘制到任何大小窗口的能力,或者它总是相同的大小,您可以简化它.
定义Panel类: class DataPanel(data: Array[Array[Color]]) extends Panel { override def paintComponent(g: Graphics2D) { val dx = g.getClipBounds.width.toFloat / data.length val dy = g.getClipBounds.height.toFloat / data.map(_.length).max for { x <- 0 until data.length y <- 0 until data(x).length x1 = (x * dx).toInt y1 = (y * dy).toInt x2 = ((x + 1) * dx).toInt y2 = ((y + 1) * dy).toInt } { data(x)(y) match { case c: Color => g.setColor(c) case _ => g.setColor(Color.WHITE) } g.fillRect(x1,y1,x2 - x1,y2 - y1) } } } 然后制作一个Swing应用程序: import swing.{Panel,MainFrame,SimpleSwingApplication} import java.awt.{Color,Graphics2D,Dimension} object Draw extends SimpleSwingApplication { val data = // put data here def top = new MainFrame { contents = new DataPanel(data) { preferredSize = new Dimension(300,300) } } } 你的数据可能是这样的 val data = Array.ofDim[Color](25,25) // plot some points data(0)(0) = Color.BLACK data(4)(4) = Color.RED data(0)(4) = Color.GREEN data(4)(0) = Color.BLUE // draw a circle import math._ { for { t <- Range.Double(0,2 * Pi,Pi / 60) x = 12.5 + 10 * cos(t) y = 12.5 + 10 * sin(t) c = new Color(0.5f,0f,(t / 2 / Pi).toFloat) } data(x.toInt)(y.toInt) = c } 哪个会给你: 您可以轻松地在现有阵列上使用地图功能将其映射到颜色. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |