设计和实现24位位图图片色彩翻转成互补色程序。

实验题目:设计和实现24位位图图片色彩翻转成互补色程序。

(提示:24位位图文件中的数据部分定义了每上像素像素单元,每个像素由三个字节组成,分别表示红、绿、蓝(r,g,b)三个分量,假设设这三量分别是x,y,z,那么255-x,255-y,255-z就是它的互补色。)

解题思路与算法设计:

1、看书查找二进制文件的操作方法,包括:打开二进制文件,读或写二进制文件的方法。

2、查找网络资源,找出24彩色图片的格式(注意:彩色图片文件有多种,比如:16位彩色文件,32位彩色文件等等,不要搞错了!24位位图文件分三部分:文件信息头、图像信息头和图像像素数据),我们要搞清楚文件信息头的长度和每个字节的含义,图像信息头的长度和每个字节的含义和像素数据的格式。

3、准备图片,注意不要搞错了,如果找不到24位位图(.bmp)文件,可以用系统自带pant打开一个别的图片,再另存为24位位图文件。

4、编程实现:

(1)打开位图文件(原文件)读取文件信息头的关键信息以确认这个文件是24位位图文件。

(2)读取文件的像素信息头的关键信息,比如:确定像素的有多少行,一行有多少像素等信息。

(3)新建一个位图文件,扩展名是.bmp(目标文件),把原图像文件的信息头的信息全部拷贝过去。

(4)将原文件指针移动到像素数据起始处,循环读取每个像素的r,g,b值。再把255-r,

255-g,255-b的值写到目标文件中。值到处理完有像素为止。关闭所有文件。

(5)打开目标文件查看翻转后的图片,验证你的代码。

from struct import *class rmb:def __init__(self):file = open('messi.bmp', 'rb')self.bfType = file.read(2)self.bfSize = file.read(4)self.bfReserved1 = file.read(2)self.bfReserved2 = file.read(2)self.bfOffBits = file.read(4)self.biSize = file.read(4)self.biWidth = file.read(4)self.biHeight = file.read(4)self.biPlanes = file.read(2)self.biBitCount = file.read(2)self.biCompression = file.read(4)self.biSizeImage = file.read(4)self.biXPelsPerMeter = file.read(4)self.biYPelsPerMeter = file.read(4)self.biClrUsed = file.read(4)self.biClrImportant = file.read(4)self.bmp_data = []self.h, = unpack("<i", self.biHeight)self.w, = unpack("<i", self.biWidth)print(self.h)print(self.w)for height in range(self.h):bmp_data_row = []count = 0for width in range(self.w):bmp_data_row.append([unpack("<B", file.read(1))[0], unpack("<B", file.read(1))[0], unpack("<B", file.read(1))[0]])count += 3while count % 4 != 0:file.read(1)count += 1self.bmp_data.append(bmp_data_row)# self.bmp_data.reverse()file.close()def write_(self):res_file = open('res.bmp', 'wb')res_file.write(self.bfType)res_file.write(self.bfSize)res_file.write(self.bfReserved1)res_file.write(self.bfReserved2)res_file.write(self.bfOffBits)res_file.write(self.biSize)res_file.write(self.biWidth)res_file.write(self.biHeight)res_file.write(self.biPlanes)res_file.write(self.biBitCount)res_file.write(self.biCompression)res_file.write(self.biSizeImage)res_file.write(self.biXPelsPerMeter)res_file.write(self.biYPelsPerMeter)res_file.write(self.biClrUsed)res_file.write(self.biClrImportant)# res_file.write(bytes(self.img))for height in range(self.h):bmp_data_row = self.bmp_data[height]count = 0for width in range(self.w):res_file.write(pack("<B", 255 - bmp_data_row[width][0]))res_file.write(pack("<B", 255 - bmp_data_row[width][1]))res_file.write(pack("<B", 255 - bmp_data_row[width][2]))count += 3while count % 4 != 0:res_file.write(pack("<B", 0))count += 1res = rmb
res.__init__(self=res)
res.write_(self=res)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab|电价型负荷需求响应(考虑电价变化)

程序复现来源于《计及需求响应消纳风电的电-热综合能源系统经济调度 》第四章内容。 一、原理 需求响应的基本原理是需求侧根据电力市场价格和电网要求改变其负荷需求以 获取一定的利益回报。其中 PDR 可通过直观的电价变化信号引导用户调节用电方式&#xff0c; 从而达到优…

2024.4.13力扣每日一题——找到冠军 II

2024.4.13 题目来源我的题解方法一 拓扑排序思想 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2924 我的题解 方法一 拓扑排序思想 计算每个节点的入度&#xff0c;只有入度为0的节点才可能是冠军&#xff0c;但是若存在多个入度为0的节点&#xff0c;则无法知道谁是…

Qt for Android 开发环境

在搭建环境时开始感觉还挺顺利的&#xff0c;从 Qt 配置的环境里面看并没有什么问题&#xff0c;可真正编译程序的时候发现全是错误。 最开始的时候安装了 JDK21 最新版本&#xff0c;然后根据 JDK21 安装 ndk, build-tools, Platform-Tools 和 Gradle&#xff0c;但是不管这么…

图书管理员

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 图书馆中每本书都有一个图书编码&#xff0c;可以用于快速检索图书&#xff0c;这个图书编码是一个正整数。 每位借书的读者手中有一个需求码&#xff0c;这个需求码也是一个正整数…

零基础自学Python,啃透这五本书就够了!

选择合适的学习资源 在自学Python的前期&#xff0c;选择一本适合初学者的Python入门书籍或在线教程&#xff0c;从基础开始学习&#xff0c;好的入门书籍或在线教程会按照逻辑顺序组织知识&#xff0c;从基础概念开始&#xff0c;逐步引导你深入学习Python编程语言。这种系统…

如何在深度学习中调用CAME

1、介绍 CAME&#xff1a;一种以置信度为导向的策略&#xff0c;以减少现有内存高效优化器的不稳定性。基于此策略&#xff0c;我们提出CAME同时实现两个目标:传统自适应方法的快速收敛和内存高效方法的低内存使用。大量的实验证明了CAME在各种NLP任务(如BERT和GPT-2训练)中的…

Android Jetpack 组件

1、ViewModel 用于将数据与Activity分离&#xff0c;这样在Activity声明周期中&#xff0c;数据不会丢失。 &#xff08;1&#xff09;简单使用 implementation ("androidx.lifecycle:lifecycle-extensions:2.2.0") // 使用ViewModel组件需要额外添加<LinearLay…

必应bing竞价广告推广开户联系方式?

随着互联网广告市场的日益繁荣与细分&#xff0c;必应Bing作为全球重要的搜索引擎之一&#xff0c;在国内市场也逐渐展现出强大的潜力与吸引力。越来越多的企业开始关注并探索必应Bing搜索广告所带来的巨大商机。其中&#xff0c;云衔科技以其卓越的专业素养和全面的服务体系&a…

stable diffusion--小白学习步骤

1.看一下Unet网络的讲解_哔哩哔哩_bilibili&#xff0c;了解Unet网络 2.看一下【生成式AI】Diffusion Model 原理剖析 (1/4)_哔哩哔哩_bilibili&#xff0c;起码要看前3/6个视频 3.看一下超详细的扩散模型&#xff08;Diffusion Models&#xff09;原理代码 - 知乎 (zhihu.co…

鑫鹿助贷CRM系统:助力助贷行业实现智能商业转型

数字化时代&#xff0c;商业竞争愈发激烈&#xff0c;助贷行业如何把握商机、实现高效管理、打造高回报率的商业模式&#xff0c;成为了助贷行业老板们比较关注的问题&#xff0c;而鑫鹿助贷CRM管理系统&#xff0c;正是这场商业变革中的得力助手&#xff0c;系统功能完善&…

途游游戏,科锐国际(计算机类),快手,得物,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招内推

途游游戏&#xff0c;科锐国际&#xff08;计算机类&#xff09;&#xff0c;快手&#xff0c;得物&#xff0c;蓝禾&#xff0c;奇安信&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;供应链&#xff0…

每帧纵享丝滑——ToDesk云电脑、网易云游戏、无影云评测分析及ComfyUI部署

目录 一、前言二、云电脑性能测评分析2.1、基本配置分析2.1.1、处理器方面2.1.2、显卡方面2.1.3、内存与存储方面2.1.4、软件功能方面 2.2、综合跑分评测 三、软件应用实测分析3.1、云电竞测评3.2、AIGC科研测评——ComfyUI部署3.2.1、下载与激活工作台3.2.2、加载模型与体验3.…

vba学习系列(4)-- index()提取指定单元格并保留字体格式

系列文章目录 文章目录 系列文章目录一、目标需求二、使用步骤1.VBA程序2.VBA简要程序 总结 一、目标需求 工作表2 B列中姓名&#xff0c;在工作表1 C列中存在相同姓名时&#xff0c;提取工作表2 AK列的对应单元格内容&#xff1b; 工作表2名称&#xff1a;OQC 工作表1名称&…

AGI的智力有可能在两年内超过人类水平

特斯拉CEO埃隆马斯克近日与挪威银行投资管理基金CEO坦根的访谈中表示&#xff0c;AGI的智力将在两年内可能超过人类智力&#xff0c;在未来五年内&#xff0c;AI的能力很可能超过所有人类。 马斯克透漏&#xff0c;去年人工智能发展过程中的主要制约因素是缺少高性能芯片&#…

基于springboot实现人事管理系统项目【项目源码+论文说明】

基于springboot实现人事管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为学校以及一些培训机构&#xff0c;都在用信息化战术来部署线上学习以及线上考试&#xff0c;可以与线下的考试有机的结合在一起&#xff0c;实现基于vue的人事系统在技术…

c++ 栈溢出问题

示例代码: #include <iostream> #include <chrono> #include <fstream>int main() {// 测量内存操作的执行时间int num = 1024 * 1024;int arry[num] = {2};int arry_tmp[num] = {0};std::ofstream outfile("data.bin", std::ios::binary | std:…

【LeetCode热题100】【二分查找】搜索二维矩阵

题目链接&#xff1a;74. 搜索二维矩阵 - 力扣&#xff08;LeetCode&#xff09; 在一个有序二维数组里面查找元素&#xff0c;同【LeetCode热题100】【矩阵】搜索二维矩阵 II-CSDN博客 如果用二分查找&#xff0c;时间复杂度是log(mn)&#xff0c;但是可以实现时间复杂度为O…

交通大模型与时序大模型整理【共15篇工作】【附开源代码】

随着城市化进程的加速和交通系统的不断发展&#xff0c;对交通数据和时序数据的整理与分析变得尤为重要。本文旨在探讨交通大模型与时序大模型的整理及其在城市规划、交通管理等领域的应用。交通大模型涉及交通流量、道路网络、交通规划等方面的数据&#xff0c;而时序大模型则…

代码随想录-算法训练营day10【栈与队列01:理论基础、用栈实现队列、用队列实现栈】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第五章 栈与队列part01 ● day 1 任务以及具体安排&#xff1a;https://docs.qq.com/doc/DUG9UR2ZUc3BjRUdY ● day 2 任务以及具体安排&#xff1a;https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG ● day 3 任务以及…

ZooKeeper临时有序节点生成过程以及序号超过最大值的处理思路

目录 ZooKeeper临时有序节点生成过程 ZooKeeper序号超过最大值的处理 ZooKeeper临时有序节点生成过程 创建节点时指定类型 当客户端向ZooKeeper请求创建节点时&#xff0c;需要指定节点类型。对于临时有序节点&#xff0c;应使用CreateMode.EPHEMERAL_SEQUENTIAL标志。这告诉…