网易首页 > 网易号 > 正文 申请入驻

FlutterComponent最佳实践之取色我来实现

0
分享至

点击上方蓝字关注我,知识会给你力量

构建个性化的UI是非常酷的。你的应用程序不需要对每个人都是一样的。一个轻松定制你的应用程序的方法是,从客户资料/封面照片中提取调色板。

它是这样做的。

首先,我们从一个网址上加载图片到byte list中。

imageBytes = (await NetworkAssetBundle(Uri.parse(photo)).load(photo))
.buffer
.asUint8List();

然后,我们导入Image lib,这样我们就可以访问每个像素,而不用担心图像的格式问题。

在下面的方法中,我访问了一个像素mesh,所以我可以从图像的不同部分挑选颜色。

List extractPixelsColors(Uint8List? bytes) {
List colors = [];

List values = bytes!.buffer.asUint8List();
imageLib.Image? image = imageLib.decodeImage(values);

List pixels = [];

int? width = image?.width;
int? height = image?.height;

int xChunk = width! ~/ (noOfPixelsPerAxis + 1);
int yChunk = height! ~/ (noOfPixelsPerAxis + 1);

for (int j = 1; j < noOfPixelsPerAxis + 1; j++) {
for (int i = 1; i < noOfPixelsPerAxis + 1; i++) {
int? pixel = image?.getPixel(xChunk * i, yChunk * j);
pixels.add(pixel);
colors.add(abgrToColor(pixel!));
}
}

return colors;
}

如果noOfPixelsPerAxis是4的话,这个网格看起来就是这样。

在这个例子中,我们将提取16个像素。

好了,现在我们有16种颜色,但我们能用它们做什么呢?我们需要以某种方式对它们进行排序,所以我们可以提取调色板。

现在我们尝试将颜色从浅色到深色排序。我们使用computeLuminance方法,这个方法的计算成本很高,所以我们也许不应该在排序方法中进行计算(对每种颜色进行多次计算),但为了这个例子,这也是可以的。

List sortColors(List colors) {
List sorted = [];

sorted.addAll(colors);
sorted.sort((a, b) => b.computeLuminance().compareTo(a.computeLuminance()));

return sorted;
}

经过分类,我们的颜色看起来像这样。

开始时图像较亮(左上方,结束时图像较暗,右下方)。我把它们显示在一个网格中,所以它们可以很容易地放在屏幕上。

我们不需要调色板中的所有16种颜色,这太多了,所以让我们试着提取4种颜色。

为了做到这一点,我将把这个16种颜色的列表分成4个4种颜色的子列表,在每个子列表中找到平均颜色,这些平均颜色将成为我们最终调色板颜色列表中的项目。

Color getAverageColor(List colors) {
int r = 0, g = 0, b = 0;

for (int i = 0; i < colors.length; i++) {
r += colors[i].red;
g += colors[i].green;
b += colors[i].blue;
}

r = r ~/ colors.length;
g = g ~/ colors.length;
b = b ~/ colors.length;

return Color.fromRGBO(r, g, b, 1);
}

平均颜色的计算方法是将所有的红色、蓝色和绿色成分加在一起,然后将总和除以所加颜色的数量。

调色板中的第一种颜色(右边没有1)是由排序列表中的前4种颜色(0、1、2、3)组成的,第二种颜色是4、5、6、7,第三种颜色是8、9、10、11,第四种是12、13、14、15。

为了防止用户界面被这些繁重的计算所阻塞,我使用了compute方法,它在一个独立的isolate(具有独立内存的新线程)上执行你的函数,并返回你的结果。

你从图像中提取的像素越多,就会花费更多的时间,所以要找到你要提取的最佳像素数。另外,图像越大,下载和解码的时间就越长。如果你能使用一些缩略图或你知道不是很大的图片,那将是最好的 :) 在下面的视频中,我提取了12x12=144像素,你可以看到它需要一两秒钟。

gif太大 看不了,请点击原文链接查看

原文链接:https://mobileappcircular.com/how-to-extract-a-color-palette-from-an-image-in-flutter-dart-d3d49699a5eb

源码地址:https://github.com/jelenalecic/coloring

向大家推荐下我的网站 https://xuyisheng.top/ 点击原文一键直达

专注 Android-Kotlin-Flutter 欢迎大家访问

本文原创公众号:群英传,授权转载请联系微信(Tomcat_xu),授权后,请在原创发表24小时后转载。

< END >

作者:徐宜生

更文不易,点个“三连”支持一下

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
你见过最主动的女生是什么样的?网友们也太会了!

你见过最主动的女生是什么样的?网友们也太会了!

滑稽斑马呀
2024-06-18 18:38:21
暴力梅出击!上海今日可达大雨到暴雨,最高气温26℃

暴力梅出击!上海今日可达大雨到暴雨,最高气温26℃

新民晚报
2024-06-19 07:25:31
极左思想祸国殃民、唯恐天下不乱,人民群众需要时刻提高警惕!

极左思想祸国殃民、唯恐天下不乱,人民群众需要时刻提高警惕!

雪莉故事汇
2024-06-19 07:29:01
苏州中考物理第一题,生活常识议论多,筷子27cm引网友质疑!

苏州中考物理第一题,生活常识议论多,筷子27cm引网友质疑!

侃故事的阿庆
2024-06-18 22:07:51
采用全新设计 全新一代宝马X3官图发布

采用全新设计 全新一代宝马X3官图发布

车质网
2024-06-19 09:24:39
电动车新国标再度修订,车主们该何去何从?

电动车新国标再度修订,车主们该何去何从?

趣说世界哈
2024-06-17 07:34:26
3-2!男排爆大冷:亚洲之光轰然倒下,日本被扣大分排名掉第5

3-2!男排爆大冷:亚洲之光轰然倒下,日本被扣大分排名掉第5

知轩体育
2024-06-19 01:08:40
笑不活了,王自如被强制执行3383万,我却笑死在网友评论区里

笑不活了,王自如被强制执行3383万,我却笑死在网友评论区里

开玩笑的水母
2024-06-18 18:45:25
未来三年,最好的投资,是守家

未来三年,最好的投资,是守家

洞见
2024-06-17 21:24:44
内蒙男子怀疑妻子出轨,在房间安装7个摄像头,情夫身份令他崩溃

内蒙男子怀疑妻子出轨,在房间安装7个摄像头,情夫身份令他崩溃

飞云如水
2024-06-16 21:18:14
女儿中考亲妈后妈共同来接!网友:看了颜值后,丈夫才是人生赢家

女儿中考亲妈后妈共同来接!网友:看了颜值后,丈夫才是人生赢家

垛垛糖
2024-06-18 12:47:49
英媒:乌克兰和平峰会令人失望

英媒:乌克兰和平峰会令人失望

环球时报国际
2024-06-18 08:37:29
28岁高中学历的他,将终结马克龙时代?

28岁高中学历的他,将终结马克龙时代?

观察者网
2024-06-18 23:18:08
墨西哥新当选市长凌晨被枪杀,原定于10月就职,近9个月已有约39位候选人遇害

墨西哥新当选市长凌晨被枪杀,原定于10月就职,近9个月已有约39位候选人遇害

极目新闻
2024-06-18 12:16:49
外交部敦促美方:不得签署!

外交部敦促美方:不得签署!

环球时报新闻
2024-06-18 20:00:43
被大49岁的谢贤养了12年,拿2000万分手费走人的coco,如今怎样了

被大49岁的谢贤养了12年,拿2000万分手费走人的coco,如今怎样了

闻星盼夏
2024-06-17 18:50:02
注销又有新规定!国家新明确:2024年,企业注销要按这个来了!

注销又有新规定!国家新明确:2024年,企业注销要按这个来了!

学税
2024-06-18 14:34:18
广东暴雨救援现场:起飞、降落时螺旋桨发出的噪声没停过

广东暴雨救援现场:起飞、降落时螺旋桨发出的噪声没停过

新京报
2024-06-19 08:06:30
笑不活了!福宝是第一个把笋剥干净吃的大熊猫,网友评论区炸锅!

笑不活了!福宝是第一个把笋剥干净吃的大熊猫,网友评论区炸锅!

普陀动物世界
2024-06-18 22:17:31
卡佩罗:英格兰充满恐惧和疲惫,解雇罗纳尔多是因他经常外出聚会

卡佩罗:英格兰充满恐惧和疲惫,解雇罗纳尔多是因他经常外出聚会

直播吧
2024-06-18 20:24:02
2024-06-19 11:34:44
Android群英传
Android群英传
Android群英传
441文章数 921关注度
往期回顾 全部

科技要闻

英伟达市值超微软 成全球市值最高上市公司

头条要闻

网友称北京科技大学教授看望姜萍 校方:非本校老师

头条要闻

网友称北京科技大学教授看望姜萍 校方:非本校老师

体育要闻

幸运的倒霉蛋!8年前差点退役,现在他帮两支NBA球队夺冠

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

吴清:证监会将推出“科创板八条”

汽车要闻

全球最低价 现代IONIQ 5N预售价39.88万

态度原创

数码
艺术
房产
家居
教育

数码要闻

4K/240Hz拉满游戏体验!Evnia 32M2N6800MW游戏显示器测评

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

房产要闻

17.9亿!终于,有民企在三亚大手笔拿地了!周边房价10万+!

家居要闻

自然开放 实现灵动可变空间

教育要闻

【#北大博士挑战姜萍竞赛题7题仅对1道#】#你认为天赋和努力哪个更重要# 近日,17岁的中专在读生姜...

无障碍浏览 进入关怀版