首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否有方法将1024x1024位图的RGB值与输入文件中的值与仅进行1,048,576次比较进行比较?

是否有方法将1024x1024位图的RGB值与输入文件中的值与仅进行1,048,576次比较进行比较?
EN

Stack Overflow用户
提问于 2022-06-04 19:38:18
回答 1查看 129关注 0票数 0

我所做的是:

打开一个输入文件(txt),其RGB值为64色条目。

打开另一个输入文件,即带有颜色值(每个像素3个字节)的1024x1024位图。

从txt文件中读取并将其中的值分配到结构数组中。

结构数组保存R、G、B值和所述颜色的名称。接下来,我将读取RGB值的位图,并将它们与结构中的值进行比较。

我创建了一个for循环,以1,048,576作为限制,在内部创建了另一个for循环,其中64为限制,用于比较值。问题是比较的计数将导致67,108,864。理论最小值为1,048,576。

到目前为止,这就是我所拥有的:

代码语言:javascript
运行
AI代码解释
复制
 for (int i = 0;!bitmap.eof(); i += 3)
{
    unsigned char red, green, blue;
    bitmap.read((char*)&blue, sizeof(unsigned char));
    bitmap.read((char*)&green, sizeof(unsigned char));
    bitmap.read((char*)&red, sizeof(unsigned char));
    for (int j = 0; j < 64; j++)
    {
        if (int(blue) == bmiColors[j].b && int(green) == bmiColors[j].g && int(red) == bmiColors[j].r)
        {
            //cout << "B: " << int(b) << " G: " << int(g) << " R: " << int(r) << endl;
                //cout << "Position: " << bitmap.tellg() << endl;
            bmiColors[j].matchCount += 1;
            count++;
        }
        else
        {
            bmiColors[j].skipCount += 1;
            count++;
        }
    }
}

你会如何优化它呢?我得到的提示是使用像素颜色作为表中的索引。请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2022-06-04 22:35:25

将像素颜色用作表中的索引可能会有问题。颜色{255, 255, 255}将具有索引16777215 (255*65536 + 255*256 + 255)。它可能太大,也可能不太大。类似的想法可能是使用某种map,比如unordered_map,并将64 bmiColors存储在其中,并将它们映射到bitmap文件中的计数。

示例:

代码语言:javascript
运行
AI代码解释
复制
#include <cstdint>
#include <fstream>
#include <iostream>
#include <iterator>
#include <unordered_map>

// A class to store one pixel
struct RGB {
    uint8_t r;
    uint8_t g;
    uint8_t b;

    // compare two RGB:s:
    bool operator==(const RGB& rhs) const { return r == rhs.r
                                                && g == rhs.g
                                                && b == rhs.b; }

    // read one RGB from an istream:
    friend std::istream& operator>>(std::istream& is, RGB& rgb) {
        is.read(reinterpret_cast<char*>(&rgb.r), 1);
        is.read(reinterpret_cast<char*>(&rgb.g), 1);
        is.read(reinterpret_cast<char*>(&rgb.b), 1);
        return is;
    }
};

// A specialization of `std::hash` for RGB to be able to use it in an `unorderded_map`:
namespace std {
template<>
struct hash<RGB> {
    size_t operator()(const RGB& rgb) const noexcept { return rgb.r << 16
                                                            | rgb.g << 8
                                                            | rgb.b; }
};
} // namespace std

然后主程序会

  • 通过读取包含64个值的文件创建unordered_mapbmiColors
  • bitmap文件中读取并使用bmiColors.find查看颜色是否存在。如果存在value.

,则增加映射的

  • 打印结果

代码语言:javascript
运行
AI代码解释
复制
int main() {
    std::unordered_map<RGB, std::uint32_t> bmiColors;
    {
        std::ifstream bmi("bmi.bmp");
        if(not bmi) return 1;
        std::transform(std::istream_iterator<RGB>(bmi), std::istream_iterator<RGB>{},
                       std::inserter(bmiColors, bmiColors.end()), [](const RGB& rgb) {
                           return std::pair{rgb, 0};
                       });
    }

    if(std::ifstream bitmap("file.bmp"); bitmap) {
        std::for_each(std::istream_iterator<RGB>(bitmap), std::istream_iterator<RGB>{}, 
                      [&bmiColors](const RGB& rgb) {
                          if(auto it = bmiColors.find(rgb); it != bmiColors.end()) {
                              ++it->second;
                          }
                      });
    }

    // print the result
    for(auto& [rgb, count] : bmiColors) {
        if(count) {
            std::cout << static_cast<unsigned>(rgb.r) << ' '
                      << static_cast<unsigned>(rgb.g) << ' '
                      << static_cast<unsigned>(rgb.b) << ' ' << count << '\n';
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72504617

复制
相关文章
IE错误汇总
出错背景:vue-cli结合webpack搭建的项目,在IE11运行报错,报错信息会指出错误出处,比如:“app.js (5164,1)”。已安装es6转换es5的依赖包,webpack-dev-server版本换成2.6.1或者2.11.2还是同样的错误。
城市中的游牧民族
2019/02/21
3.1K0
red,不红不专,但性感
red lang 前两天发布 0.6.3 了。osx GUI 终于得到了支持。 这事,连 hacker news 上都没掀出多少波澜。帖子在近二百多顶后,就渐渐沉底,不知去向。 我第一次听说 red 大概是 2015 年。当时在 medium 上有一篇采访 Nenad Rakocevic 的帖子,谈了 red 的思想,red 对 rebol 的传承,以及其雄心勃勃的发展计划。那篇文章里, red 1.0 预计在 1 年左右,也就是 2016 年面世,可惜现在都 2017 了,0.6.3 才姗姗来迟。 为什么
tyrchen
2018/03/29
1.3K0
red,不红不专,但性感
企业数字化营销,这个工作不“性感”但很重要
嘉宾|宋星 编辑|高玉娴 当我们购买某件商品,脑中闪现的不再是耳熟能详的电视广告台词,而是在社交平台上某位博主的疯狂“种草”;当我们进入某个电商平台,不再信奉卖家的一面之词,而是先把买家评价通览一遍——种种现象表明,消费者正在从商业信息的被动接收者,变成商业信息的主动创造者、承载者和传播者。 这意味着,海量的商业信息将铺天盖地而来,消费者的注意力经历前所未有的分散化、粉末化,忠诚度将持续降低。而企业营销模式,则不可避免地迎来巨大挑战。 为了破此局,越来越多的企业开始进行数字营销运营,通过打造私域,把分
深度学习与Python
2023/03/29
3570
企业数字化营销,这个工作不“性感”但很重要
绚丽的javascript拾色器(不兼容IE8及以下)
一切尽在注释中 html节点 <div id="colorpicker" style="display:inline-block;"> <input class="color-value" type="text" value="#ffffff" /> <div class="canvas-box" style="display:none;padding:10px;border:1px solid #ccc;"> <canvas id="canvas" style="cursor:crosshair;
lonelydawn
2018/02/09
1.5K0
绚丽的javascript拾色器(不兼容IE8及以下)
没有Eureka,但多了Nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
battcn
2018/08/03
1.6K0
没有Eureka,但多了Nacos
hibernate persist update 方法没有正常工作(不保存数据,不更新数据)
在工程中通过spring aop的方式配置事务,使用hibernate做持久化。在代码实现中使用hibernate persit()方法插入数据到数据库,使用hibernate update()方法更新数据。问题是执行这两个方法没有报错,但是也没有插入数据或者更新数据。
用户3148308
2018/09/13
2.4K0
hibernate persist update 方法没有正常工作(不保存数据,不更新数据)
一行代码解决IE6,IE7,IE8不兼容问题
最近在整理网页mate标签,想着把常用的mate标签记录一下,有的可以解决IE不兼容的问题。现在电脑普遍来说最低版本的IE也应该是IE8了,但是不排除某些落后的电脑机器依然是IE6.7,所以整理下相关资料以留备用。
李洋博客
2021/06/16
1.4K0
py+selenium+IE10【IE已停止工作】【已解决】
     手工跑的时候,IE挂,提示“Internet Explorer 已经为了帮助保护您的计算机而关闭此网页”。
逆向小白
2019/03/06
8120
py+selenium+IE10【IE已停止工作】【已解决】
IE下尚未实现错误的原因
     IE下JS执行,提示“尚未实现”的错误,在firebug中没有任何错误提示。打开IE就遇到该死的“尚未实现错误”,根据IE中提示的位置找过去也没有发现任何错误,看来IE的报错定位也不太准确。
大江小浪
2018/07/25
1.1K0
Windows凭据不工作
如果不是敲错IP、用户名、密码,报凭据不工作,一般情况下执行这几句命令后重启远程服务就正常了
Windows技术交流
2021/06/15
6.3K0
一行代码解决IE6,IE7,IE8不兼容问题
最近在整理网页mate标签,想着把常用的mate标签记录一下,有的可以解决IE不兼容的问题。现在电脑普遍来说最低版本的IE也应该是IE8了,但是不排除某些落后的电脑机器依然是IE6.7,所以整理下相关资料以留备用。
雾海梦曦
2022/11/04
1.2K0
一行代码解决IE6,IE7,IE8不兼容问题
MySQL没有启动成功,没有报告任何错误
问题描述: 在使用"net start mysqld" 的时候出现: MySQL 服务正在启动… MySQL 服务无法启动。
vincentbbli
2021/08/18
3.1K0
javascript错误类型
作为一个程序员,需要的不仅仅是技术,更是需要在遇到错误的时候对错误的处理能力。就前端而言,技术一直在更新,但是JavaScript中的错误也就是那么几个。掌握不同的报错信息会让你的实际开发事半功倍。
踏浪
2019/07/31
8270
解决老版本IE不兼容rgba的问题
rgba 的含义,r 代表 red ,g 代表 green ,b 代表 blue ,红绿蓝是三原色。所有颜色都可以由这三种颜色拼合而成。a 代表透明度。
德顺
2019/11/13
1.8K0
javaScript创建无边框iframe兼容ie
<script> var m_iframe=document.createElement("iframe"); m_iframe.scrolling="no"; m_iframe.setAttribute("frameborder", "0", 0);  //m_iframe.frameborder="0";ie7无效 m_iframe.src="http://www.cnblogs.com/cssfirefly"; document.body.appendChild(m_iframe); </script
deepcc
2018/05/16
1.6K0
JavaScript 错误异常
JavaScript 错误异常 错误异常语句 try 语句测试代码块中的错误 catch 语句处理错误 throw 语句允许自定义错误 finally 语句在错误异常语句后,必须执行的代码块 try { adddlert("Hello") ; } catch (err) { document.getElementById("demo").innerHTML = err.message ; } // 结果 : adddlert is not defined JavaScript 将 addd
Mirror王宇阳
2020/11/12
4970
SignalR 在IE中无法工作 - Internet Explorer
运行基于SignalR的超线程上载器的代码,发现SignalR 在IE 9上居然没法工作了,提示如下: 提示很明显,需要json2.js的支持。 使用Nuget 搜索json2.js 并安装: 在引用
张善友
2018/01/29
3.5K0
SignalR 在IE中无法工作 - Internet Explorer
select2 没有 allowClear 不生效
select2 没有 allowClear 不生效 添加: placeholder: "请选择", placeholderOption: "first", $("[name=deptNo]").htm
一个会写诗的程序员
2018/08/17
2K0
select2 没有 allowClear 不生效
ie6下a标签的onclick不执行问题
代码: <a href="javascript:void(0)" onclick="loadiframe()">点我咯</a> <script> var loadiframe = function(){ alert('弹不出来!!!') } </script> 解决方案: 1、修改为href="##",为什么是两个#,因为一个#会往上跳; 2、修改为href="javascript: void loadiframe()"; 3、把href 去掉; 4、onclick="lo
deepcc
2018/05/16
1.4K0
Sqoop导入Oracle所有表,没有报错,但失败
1、导入到HDFS [root@node1 sqoop-1.4.7]# bin/sqoop-import-all-tables --connect jdbc:oracle:thin:@node1:1521:ORA --username TEST --password test --as-textfile --warehouse-dir /user/root Warning: /opt/sqoop-1.4.7/bin/../../hbase does not exist! HBase imports will
程裕强
2022/05/06
1.6K0

相似问题

WindowsFormHost Paint事件未触发

12

事件持续触发

30

事件持续触发

10

TreeView事件持续触发

10

单击事件持续触发

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档