如何处理 android 涂色书应用程序的图像?
How to process an image for an android coloring book app?
我想为 Android 台设备开发一款涂色本应用。
但是,我没有实际处理图像以便为它们着色的经验。我担心我的问题可能太模糊了,但这是我根据我的经验所能做的最好的,所以如果你试图回答,请耐心等待 (:
所以这是我的问题。目前我不打算使用任何基于 sprite 的引擎,因为我没有办法支付我知道如何使用的引擎。所以这让我只能使用基本的 Android 框架。
我要的结果是这样的图像:
然后让应用的用户选择一种颜色并填充空白。
我可以设法完成 ui 并对应用程序的其他部分进行编程,但是我完全不知道如何处理这样的图像,以便应用程序可以将空白区域识别为段和获得给它们上色的能力。
如果您需要有关我的问题的更多信息,请提问!
提前谢谢你,光荣的 Whosebug 社区 <3
这个问题对于 Stack Overflow 来说太宽泛了,可能会被关闭,但一如既往,你应该把你的问题分解成更小的部分。
第 1 步:处理图像,使其只包含黑色和白色。您 post 编辑的图像现在包含 "off-white" 会使填充变得更加困难的伪影,因此请摆脱它们。
第 2 步:检测用户点击的位置。当用户点击时,您需要知道该点击在图像中的位置。
第 3 步:从该点开始,填充它周围的(白色)区域。 Google 是你的朋友,但 flood fill algorithm 是一个很好的起点。
第四步:输出图像。
您可以将这些步骤中的任何一个分解为更小的步骤。当您在某个特定步骤遇到困难时,您可以 post 一个 MCVE 显示您尝试过的内容,这样会更容易帮助您。
您可以执行下一步:
- 获取图像的位图实例
Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
- 当用户触摸屏幕时获取触摸点相对于图像的 x,y
- 使用Flood fill算法填充白色区域https://en.wikipedia.org/wiki/Flood_fill
要获取位置 (x,y) 处的像素,请使用:
myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0,
myBitmap.getWidth(), myBitmap.getHeight());
- 要更改位置 (x,y) 处的像素值,请使用:
myBitmap.setPixel(x, y, Color.rgb(255, 255, 0));
检查此 link :Android flood-fill algorithm
使用 QuickLinearFloodFilelr 填充白色区域。
像这样:
QueueLinearFloodFiller f = new QueueLinearFloodFiller(mBitmap,clr_int,mPaint.getColor());
f.setFillColor(mPaint.getColor());
f.setTargetColor(clr_int);
f.setTolerance(10);
f.floodFill(p1.x,p1.y); //fill bitmap, at p1 with p1's color and fill with Color from Switch
我想为 Android 台设备开发一款涂色本应用。
但是,我没有实际处理图像以便为它们着色的经验。我担心我的问题可能太模糊了,但这是我根据我的经验所能做的最好的,所以如果你试图回答,请耐心等待 (:
所以这是我的问题。目前我不打算使用任何基于 sprite 的引擎,因为我没有办法支付我知道如何使用的引擎。所以这让我只能使用基本的 Android 框架。
我要的结果是这样的图像:
然后让应用的用户选择一种颜色并填充空白。
我可以设法完成 ui 并对应用程序的其他部分进行编程,但是我完全不知道如何处理这样的图像,以便应用程序可以将空白区域识别为段和获得给它们上色的能力。
如果您需要有关我的问题的更多信息,请提问!
提前谢谢你,光荣的 Whosebug 社区 <3
这个问题对于 Stack Overflow 来说太宽泛了,可能会被关闭,但一如既往,你应该把你的问题分解成更小的部分。
第 1 步:处理图像,使其只包含黑色和白色。您 post 编辑的图像现在包含 "off-white" 会使填充变得更加困难的伪影,因此请摆脱它们。
第 2 步:检测用户点击的位置。当用户点击时,您需要知道该点击在图像中的位置。
第 3 步:从该点开始,填充它周围的(白色)区域。 Google 是你的朋友,但 flood fill algorithm 是一个很好的起点。
第四步:输出图像。
您可以将这些步骤中的任何一个分解为更小的步骤。当您在某个特定步骤遇到困难时,您可以 post 一个 MCVE 显示您尝试过的内容,这样会更容易帮助您。
您可以执行下一步:
- 获取图像的位图实例
Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
- 当用户触摸屏幕时获取触摸点相对于图像的 x,y
- 使用Flood fill算法填充白色区域https://en.wikipedia.org/wiki/Flood_fill
要获取位置 (x,y) 处的像素,请使用:
myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());
- 要更改位置 (x,y) 处的像素值,请使用:
myBitmap.setPixel(x, y, Color.rgb(255, 255, 0));
检查此 link :Android flood-fill algorithm
使用 QuickLinearFloodFilelr 填充白色区域。
像这样:
QueueLinearFloodFiller f = new QueueLinearFloodFiller(mBitmap,clr_int,mPaint.getColor());
f.setFillColor(mPaint.getColor());
f.setTargetColor(clr_int);
f.setTolerance(10);
f.floodFill(p1.x,p1.y); //fill bitmap, at p1 with p1's color and fill with Color from Switch