问题描述
我正在尝试编写一个包含自行设计的GUI的小游戏,目的是自学android-kotlin。除了将像素从无符号字节数组传输到屏幕之外,我已经弄清楚了所有内容。问题:.drawRGB(r,g,b)
方法确实为整个画布着色,而不是为单个像素着色,我需要一种操作单个像素的方法,类似于.drawSinglePixelRGB(r,b,xpos,ypos)
的方法,但是经过两个小时的研究,我仍然卡住了。
我当前的项目结构如下:我创建了一个AParent
类android.view.View
,它包含一个Canvas
,其中包含一个Bitmap
。 AParent
类从我的ABasicElement
类扩展的对象负载中获取颜色数据,所有对象都有方法getPixel(xpos,ypos)
返回一个UByte数组,该数组包含3个Byte-Values(0到255)表示红色,绿色和蓝色。
我只是试图将ByteArray数据显示在屏幕上,如果有比“从View,Canvas和Bitmap扩展”更好/更快的方法,我很乐意知道。否则,我将非常感谢如何将ByteArray-Data / pixel传输到View / Canvas / Bitmap的解决方案。
这是我当前的AParent
类,不需要addElem()
和recalcSubElemRegister()
方法来理解:
package de.gfx.basicv2
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.view.View
class AParent (context: Context) : View(context) {
var xSize : Int = 1
var ySize : Int = 1
private var whichSubElem = IntArray(xSize * ySize){-1}
private var subElemList = arraylistof<ABasicElement>()
private lateinit var extraCanvas: Canvas
private lateinit var extraBitmap: Bitmap
override fun onSizeChanged(width: Int,height: Int,oldWidth: Int,oldHeight: Int) {
super.onSizeChanged(width,height,oldWidth,oldHeight)
// Reorganizing SubElements of the Parent
xSize = width
ySize = height
whichSubElem = IntArray(xSize * ySize){-1}
for(i in 0 until subElemList.size){
subElemList[i].resize(xSize,ySize)
recalcSubElemRegister(subElemList[i],i)
}
// Canvas and Bitmap related Stuff
if (::extraBitmap.isInitialized) extraBitmap.recycle()
extraBitmap = Bitmap.createBitmap(width,Bitmap.Config.ARGB_8888)
extraCanvas = Canvas(extraBitmap)
refreshBitmap() // only refresh Bitmap-data once for testing purposes
}
override fun onDraw(canvas: Canvas) {
// Draw the bitmap.
canvas.drawBitmap(extraBitmap,0f,null)
}
// Not drawing related Method for adding SubElements to the parent
fun addElem(elem : ABasicElement) {
val elemID = subElemList.size
subElemList.add(elem)
for (x in xSize*elem.xSpanPercent.first/100 until xSize*elem.xSpanPercent.second/100){
for (y in ySize*elem.ySpanPercent.first/100 until ySize*elem.ySpanPercent.second/100){
whichSubElem[(y*xSize)+x] = elemID
}
}
}
// Not drawing related Method for resizing the Register of SubElements
fun recalcSubElemRegister(elem: ABasicElement,elemID: Int){
for (x in xSize*elem.xSpanPercent.first/100 until xSize*elem.xSpanPercent.second/100){
for (y in ySize*elem.ySpanPercent.first/100 until ySize*elem.ySpanPercent.second/100){
whichSubElem[(y*xSize)+x] = elemID
}
}
}
// Method for getting the pixels from all the SubElements to the screen,help needed here
fun refreshBitmap(){
for (x in 0 until xSize){
for (y in 0 until ySize){
if (whichSubElem[(y*xSize)+x] != -1){
val pixColor = subElemList[whichSubElem[(y*xSize)+x]].getPixel(x,y)
extraCanvas.drawRGB(pixColor[0].toInt(),pixColor[1].toInt(),pixColor[2].toInt())
// --!! instead of .drawRGB a method to draw a single Pixel is needed
}
}
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)