Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用扫描线填充算法后,轮廓边缘存在间隙(未填充)_Android_Kotlin_Opengl Es_Brush - Fatal编程技术网

Android 使用扫描线填充算法后,轮廓边缘存在间隙(未填充)

Android 使用扫描线填充算法后,轮廓边缘存在间隙(未填充),android,kotlin,opengl-es,brush,Android,Kotlin,Opengl Es,Brush,在Android平台上,用扫描线填充指定区域(目前仅支持凸面形状)后,我发现在轮廓边缘有一些未填充的间隙 看起来是这样的: 主要集中在填充区域的右上角,左上角有少量空白。实施代码如下: class Fill02:MainActivity.ifll{ private val pixel=ByteBuffer.allocate(3) //要填充的颜色 专用val颜色=字节数组(3) 私有变量xScanLeft=0 私有变量xScanRight=0 覆盖有趣的填充(x:Int,y:Int,minX:

在Android平台上,用扫描线填充指定区域(目前仅支持凸面形状)后,我发现在轮廓边缘有一些未填充的间隙

看起来是这样的:

主要集中在填充区域的右上角,左上角有少量空白。实施代码如下:

class Fill02:MainActivity.ifll{
private val pixel=ByteBuffer.allocate(3)
//要填充的颜色
专用val颜色=字节数组(3)
私有变量xScanLeft=0
私有变量xScanRight=0
覆盖有趣的填充(x:Int,y:Int,minX:Int,maxX:Int,minY:Int,maxY:Int,callback:MainActivity.IFillCallback){
val surfaceWidth=maxX-minX
val表面高度=最大-最小
GLES20.glReadPixels(x,y,1,1,GLES20.GL_RGB,GLES20.GL_无符号字节,像素)
像素位置(0)
颜色[0]=像素。获取(0)
颜色[1]=像素。获取(1)
颜色[2]=像素。获取(2)
var xLeft=x
var xRight=x
而(isSameColor(xLeft-1,y)和&0
callback.fullCallback
方法代码如下:

override-fullCallback(x:Float,y:Float){
buffer.put((x-mSurfaceSize.x)/mSurfaceSize.x)
buffer.put((mSurfaceSize.y-y)/mSurfaceSize.y)
}
更改了曲面上的覆盖(gl:GL10?,宽度:Int,高度:Int){
mSurfaceSize.set(宽/2.0f,高/2.0f)
GLES20.glViewport(0,0,宽度,高度)
}
顶点着色器代码如下所示:

属性向量2位置;
均匀的浮点数;
void main(){
gl_PointSize=vPointSize;
gl_位置=vec4(V位置,0.0,1.0);
}
完整的源代码已打开

请问有什么问题

附件1:

修改代码后,图片已导出

导出图片的代码如下所示:

private fun save(){
isSave=false
val w=mSurfaceSize.x.toInt()*2
val h=mSurfaceSize.y.toInt()*2
val屏幕快照大小=w*h
val pixels=IntBuffer.allocate(屏幕快照大小)
GLES20.glReadPixels(0,0,w,h,GLES20.GL_RGBA,GLES20.GL_无符号_字节,像素)
环球镜发射{
val buffer=IntBuffer.allocate(屏幕快照大小)
对于(i在0中直到h){
对于(0中的j到w){
buffer.put((h-i-1)*w+j,pixels.get(i*w+j));
}
}
val config=Bitmap.config.ARGB_8888
val bitmap=bitmap.createBitmap(w,h,config)
位图.eraseColor(Color.argb(0、255、255、255))
位图.copyPixelsFromBuffer(缓冲区)
val out=FileOutputStream(保存路径)
bitmap.compress(bitmap.CompressFormat.JPEG,100,out)
}
}

也许在黑线中有别名,这样亮点实际上不是白色的,因此颜色与内部背景不同,不是吗?您发布的图像在填充颜色上似乎也有别名,因此我怀疑它是否真的是输出图像,或者导出/保存过程是否改变了它。出于这个原因,我不确定这是一个别名问题,但我仍然怀疑它是。你能分享真实的原始输入图像吗?@DiegoMazzaro是的,你是对的,图片是通过截图获得的。修改代码后,图片已导出,图片已附加到原始帖子。我要求输入图片。。你能提供那个吗?或者你可能已经验证过它在那个阶段有(没有)混叠了吗?是不是可能你在黑线上有混叠,所以亮点实际上不是白色,所以颜色与内部背景不同?您发布的图像在填充颜色上似乎也有别名,因此我怀疑它是否真的是输出图像,或者导出/保存过程是否改变了它。出于这个原因,我不确定这是一个别名问题,但我仍然怀疑它是。你能共用空调吗