C#与C++位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导

C#中位图保存方式与C++中位图保存方式的区别是什么?如何将C#中位图buffer正确传到C++代码中?求大神指导

1个回答

C++中位图分为32/24/16位的三种位图数据存储方式,很多时候C++中主要使用32位和24位,如果你没有特别声明的话。C#中的位图
也多数是32位的。这些所谓的32位或者24位说的是位图中一个像素用多少位来表示,一个像素一般包含RGB三基色,也就是红(red)、
绿(green)、蓝(blue),32位标识则多了一个透明通道位A(alpha)。现在一般都是32位的图,包含透明通道的。
假设你C#和C++都是32位的数据位图,那么你拷贝的时候也要考虑到数据位是否安装RGBA排列还是按照ARGB还是BGRA等等的排列方式。
你可以先获得位图的基本信息判断是32位图还是24位图,如果是相同位的位图则直接进行数据拷贝即可,不同的话则只能进行对位拷贝一般用
循环赋值。

bluelong1988111389
bluelong1988111389 恭喜你解决了
大约 5 年之前 回复
trnsfr
trnsfr 问题找到了,去掉文件头的时候去掉大小有问题,应该去掉1078,非常感谢你的帮助
大约 5 年之前 回复
trnsfr
trnsfr 没有修改文件头,我要用的只是图像buffer,不需要文件头,要传递到C++的也只是图像buffer,在C++中添加文件头保存文件只是测试图像buffer是否正常,而且所添加的文件头的信息与源图像文件是一致的
大约 5 年之前 回复
bluelong1988111389
bluelong1988111389 不要试图直接通过修改位图的头信息对位图文件进行修改,多数是没用的。如果要将位图保存为其他格式那可以先把位图读出来,传递到C++中转化为C++的位图类对象,然后由位图类对象进行保存,这通常都需要先确定位图的头信息,位图的size、字节数、数据位等等。
大约 5 年之前 回复
bluelong1988111389
bluelong1988111389 如果只是文件读取再保存你完全没有必要去掉文件头的,读出来是什么就保存什么,如果你想把位图显示出来则需要看位图。你这样直接去掉54位头,再加上文件头,如果你是直接修改了文件头信息的话那这个文件多数是异常的
大约 5 年之前 回复
trnsfr
trnsfr @bluelong1988111389 我用memorystream 读取了位图,然后将流中的数据存到Byte[]中,去掉前面54位的文件头后传到C++代码中,在C++代码中给图片buffer添加文件头后保存文件,保存的图片出现异常,跟多少位没有关系,这方面的处理是一致的
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐