2011-08-08 15 views
7

स्क्रीन पर 2 डी सरणी पिक्सल लिखने के लिए आप क्या सलाह देते हैं?स्कैला - स्क्रीन पर 2 डी सरणी लिखने के लिए सबसे आसान 2 डी ग्राफिक्स?

मेरा पहला विचार कुछ एसडब्ल्यूटी बाध्यकारी है, लेकिन क्या कोई अन्य है? प्रसंस्करण शायद?

+0

सरणी में पिक्सेल एन्कोडेड कैसे हैं? क्या आपको एक स्विंग घटक की आवश्यकता है जिसे आप किसी मौजूदा जीयूआई में जोड़ सकते हैं या बस स्क्रीन पर एक छवि प्रदर्शित कर सकते हैं? – paradigmatic

उत्तर

16

यह स्विंग में भी मुश्किल नहीं है - आप कट और पेस्ट नीचे कर सकते हैं। यदि आप रंग या किसी भी आकार की खिड़की पर आकर्षित करने की क्षमता नहीं चाहते हैं, या यदि यह हमेशा एक ही आकार है, तो आप इसे थोड़ा सा सरल बना सकते हैं।

:

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 
    } 

कुछ जो तुम देना होगा हो सकता है:

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) 
    } 
    } 
} 

फिर एक स्विंग एप्लिकेशन हो:

एक पैनल वर्ग को परिभाषित करें

enter image description here

आप आसानी से रंगों को मैप करने के लिए अपने मौजूदा सरणी पर map फ़ंक्शन का उपयोग कर सकते हैं।

+0

धन्यवाद। कोड walkthough भी सराहना करते हैं। –

+1

ध्यान दें कि आपको कुछ भी महत्वपूर्ण प्रदर्शन के लिए समझने से बचाना चाहिए। वे अनुकूलित नहीं हो जाते हैं। – hishadow

संबंधित मुद्दे