热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

求教各位关于BMP图像处理的专业问题及解决方案

目前我有两张BMP图像文件a.bmp和b.bmp,希望将它们按照以下方式进行融合:首先提取a.bmp的所有奇数行像素(如第1、3、5行),接着获取b.bmp的所有偶数行像素(如第2、4、6行)。最终目标是将这些行像素交替排列,生成一张新的图像。此过程需要确保像素顺序正确,并保持图像的整体结构和质量。
现在有两幅bmp图象a.bmp,b.bmp,我现在想以如下方式把这两幅图象合并成一幅图象:
取图象a.bmp的奇数行象素(1,3,5...),再取b.bmp的偶数行象素(2,4,6...),
然后把这些象素合并成一幅图象,请问我该怎么实现,望大家不吝指教,多谢!
问题解决,立即结帐^_^

10 个解决方案

#1


关注

#2


你应该先把BMP文件的格式看明白。然后再做这个。如果BMP文件格式明白了,这个问题就是一个循环的问题。算出图象的高度的一半,在A中取i,在B中去2*i-1。读取行的时候必须将图象的宽度乘像素点的位数。比如,32位的得乘以4,16位的乘以2等。具体不明白的可以和我用MSN联系:yuhpvct@hotmail.com
ffish——胖胖鱼

#3


我用vb做过。vc没有试验过。看看有没有什么取各个相素点的RGB值得函数然后再在新的图形里进行绘画就可以了!还能做处理。我有vb的代码。

#4


谢谢上面两位关注,
跟胖胖鱼说:我看了一下bmp的格式,在不同的象素位下它的格式不一样如8和24,8的数据值是颜色表的索引,然而24的值就是(RGB),还有一些文件是经过压缩的(行程长度编码,rle),
那会给我们在处理不同色深的bmp文件带来许多问题,是否有vc或者vb中有这样的函数,不用管这些东西,只管合并就好了。还有你上面讲的,是否是指直接从a,b读字节,然后写文件。

跟病毒情书说:这位朋友,能否把你的代码贴出来,分享一下,VB的也好!多谢!

#5


理论上用GetPixel()是可以取得的,但那样太慢了,如果你想做好一点的话,只有分析DIB格式(即Bitmap),不仅仅是8Bit, 24Bit,还有16Bit, 32Bit等等,16Bit是555格式的,如果是写游戏,还要考虑显卡的565格式,DIB的16Bit是555格式的。

我不记得GetPixel()会不会帮你在各种颜色深度下自动帮你转换正确的RGB,VB下是很容易写的,我N年前就写过,不过那实在太慢了,GetPixel()太慢。

还要注意一点,Bitmap是从左下角开始扫描数据的,Y轴是倒过来的,不注意图像就倒立了,呵呵。研究一下Bitmap格式有好处,以后可以用来写DirectX(DirectDraw)

#6


至于rle压缩的,一般的程序考虑的很少,可以暂时不理,如果你写完善了再去处理不迟。

#7


是应该从简单到难的入手。8位的一般是黑白图象。上面有一个调色板的东西,我在书上看过代码,感觉是从0开始付值,格式是每次付4个字节,如4的付值为0010,0010,0010,0000(位数可能部不对)。我想不出来它到底有什么用处,所以在提取的时候可以直接读想素点信息。16位的基本上已经不使用了。它的主要格式是RGB的555或者565(真彩16色), 就是每个像素点为一个字节(16),RGB颜色如前分的。24位和32位的就简单多了。24位为每个像素点为一个字(8),但是主要问题是RGB或者BGR32位的是在24位的基础上多一个字(8)的空位。也是注意空的位置。另外BMP图象中含有图象的宽度和高度信息,高度信息可以不做处理,直接使用,但是宽度信息需要做处理,原因是这两个信息都是表示像素点个数的,而一个像素又是不同字节(字)的,因此需要乘以这个数,才能一次读取一行的像素。至于最终显示,我认为是合成之后的事情了。一种可能是使用GetPixel()函数,另一种就是重新合成BMP文件格式的内存段,对内存段进行图象的显示。函数为:SetStretchBltMode()和StretchDIBits()。一家之言,仅供参考。
ffish——胖胖鱼

#8


补充一点,8位不一定是黑白图像,很多都是彩色的,调色板是256色的,每个颜色索引是4个字节,其结构定义是:

typedef struct tagRGBQUAD {
  BYTE    rgbBlue; 
  BYTE    rgbGreen; 
  BYTE    rgbRed; 
  BYTE    rgbReserved; 
} RGBQUAD;

然后每个像素的值都是这个颜色的索引值,从索引里取得真正的颜色值。

#9


补充一点,8位不一定是黑白图像,很多都是彩色的,调色板是256色的,每个颜色索引是4个字节,其结构定义是:

typedef struct tagRGBQUAD {
  BYTE    rgbBlue; 
  BYTE    rgbGreen; 
  BYTE    rgbRed; 
  BYTE    rgbReserved; 
} RGBQUAD;

然后每个像素的值都是这个颜色的索引值,从索引里取得真正的颜色值。

#10


我现在有个问题,如果我要合并8位的位图,那么他们的调色板是否一样的,就是
typedef struct tagRGBQUAD {
  BYTE    rgbBlue; 
  BYTE    rgbGreen; 
  BYTE    rgbRed; 
  BYTE    rgbReserved; 
} RGBQUAD;数组中的数据是否一样的?如果不一样的话,那么仅仅合并位图的数据会导致颜色
的改变。

推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
author-avatar
呵呵哒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有