मैं स्कैला में एक छवि के औसत रंग की गणना करने का प्रयास कर रहा हूं, जहां "औसत" को रेडसम/numpixels, greenSum/numpixels, blueSum/numpixels के रूप में परिभाषित किया गया है।स्कैला - interleaved सरणी की रकम की गणना करने के लिए बेवकूफ तरीका?
यहां कोड है जिसका उपयोग मैं छवि (रास्टर) के आयताकार क्षेत्र में औसत रंग की गणना करने के लिए कर रहा हूं।
// A raster is an abstraction of a piece of an image and the underlying
// pixel data.
// For instance, we can get a raster than is of the upper left twenty
// pixel square of an image
def calculateColorFromRaster(raster:Raster): Color = {
var redSum = 0
var greenSum = 0
var blueSum = 0
val minX = raster.getMinX()
val minY = raster.getMinY()
val height = raster.getHeight()
val width = raster.getWidth()
val numPixels = height * width
val numChannels = raster.getNumBands()
val pixelBuffer = new Array[Int](width*height*numChannels)
val pixels = raster.getPixels(minX,minY,width,height,pixelBuffer)
// pixelBuffer now filled with r1,g1,b1,r2,g2,b2,...
// If there's an alpha channel, it will be r1,g1,b1,a1,r2,... but we skip the alpha
for (i <- 0 until numPixels) {
val redOffset = numChannels * i
val red = pixels(redOffset)
val green = pixels(redOffset+1)
val blue = pixels(redOffset+2)
redSum+=red
greenSum+=green
blueSum+=blue
}
new Color(redSum/numPixels, greenSum/numPixels, blueSum/numPixels)
}
क्या अलग-अलग इंटरलेव किए गए सरणीओं पर संक्षेप में एक और मूर्खतापूर्ण स्कैला तरीका है? सरणी पर प्रक्षेपण करने का कोई तरीका है जो प्रत्येक चौथे तत्व पर पुनरावृत्त होता है? मुझे स्टैक ओवरफ्लो समुदाय प्रदान करने वाली किसी भी विशेषज्ञता में रूचि है।
बिल्कुल सही जवाब। इस जवाब ने मुझे यह समझने में भी मदद की है कि कैसे फोल्ड लाइफ काम करता है। केस स्टेटमेंट का उपयोग भी इसे बहुत पठनीय बनाता है। ब्रावो – I82Much
इस तथ्य को संभालने का सबसे अच्छा तरीका क्या है कि समूहित मान हमेशा 3 नहीं होता है, लेकिन इसके बजाय चैनलों की संख्या के बराबर है, जो अल्फा मान के आधार पर 3 या 4 हो सकता है? मैं हमेशा 0,1,2 सूचकांक चाहता हूं, लेकिन उस मामले में मुझे कल्पना है कि मैं अब्रे (आर, जी, बी) केस नहीं कर सका क्योंकि मेरे पास हमेशा 3 तत्व सरणी नहीं है। पिक्सल.grouped (numChannels)। फोल्ड लेफ्ट ((0,0,0)) {केस ((आरएसयूएम, जीएसयूएम, बीएसयूएम), रंग: ऐरे [Int]) => (rsum + colors (0), gsum + colors (1), बीएसयूएम + रंग (2))} – I82Much
@ सैंडोर: मुझे नहीं लगता कि आप संचयी परिणाम क्यों चाहते हैं (यानी शुरुआत में केवल पिक्सेल पर रकम)। –