¿Qué recomienda para escribir una matriz 2D de píxeles en la pantalla?Scala: gráficos 2D más fáciles para simplemente escribir una matriz 2D en la pantalla.
Mi primer pensamiento es un enlace SWT, pero ¿hay alguno más? Procesamiento tal vez?
¿Qué recomienda para escribir una matriz 2D de píxeles en la pantalla?Scala: gráficos 2D más fáciles para simplemente escribir una matriz 2D en la pantalla.
Mi primer pensamiento es un enlace SWT, pero ¿hay alguno más? Procesamiento tal vez?
No es demasiado duro en Swing - se puede cortar y pegar el siguiente. Podría simplificarlo un poco si no quiere colores o la capacidad de dibujar en cualquier ventana de tamaño, o si es siempre del mismo tamaño.
definir una clase de 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)
}
}
}
a continuación, hacer una aplicación 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)
}
}
}
Sus datos podrían ser algo así como
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
}
que le daría:
Puede usar fácilmente una función map
en su matriz existente para asignarla a colores.
Gracias. Aprecie el código walkthough también. –
Tenga en cuenta que debe evitar las comprensiones por algo que sea crítico para el rendimiento. No se optimizan. – hishadow
Voy a sugerir el SPDE de @n8han, que es un "puerto" Scala de Processing.
http://technically.us/spde/About
hay un montón de ejemplos aquí:
¿Cómo se codifica el píxel en la matriz? ¿Necesita un componente de swing que pueda agregar a una GUI existente o simplemente mostrar una imagen en la pantalla? – paradigmatic