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 恭喜你解决了
4 年多之前 回复
trnsfr
trnsfr 问题找到了,去掉文件头的时候去掉大小有问题,应该去掉1078,非常感谢你的帮助
4 年多之前 回复
trnsfr
trnsfr 没有修改文件头,我要用的只是图像buffer,不需要文件头,要传递到C++的也只是图像buffer,在C++中添加文件头保存文件只是测试图像buffer是否正常,而且所添加的文件头的信息与源图像文件是一致的
4 年多之前 回复
bluelong1988111389
bluelong1988111389 不要试图直接通过修改位图的头信息对位图文件进行修改,多数是没用的。如果要将位图保存为其他格式那可以先把位图读出来,传递到C++中转化为C++的位图类对象,然后由位图类对象进行保存,这通常都需要先确定位图的头信息,位图的size、字节数、数据位等等。
4 年多之前 回复
bluelong1988111389
bluelong1988111389 如果只是文件读取再保存你完全没有必要去掉文件头的,读出来是什么就保存什么,如果你想把位图显示出来则需要看位图。你这样直接去掉54位头,再加上文件头,如果你是直接修改了文件头信息的话那这个文件多数是异常的
4 年多之前 回复
trnsfr
trnsfr @bluelong1988111389 我用memorystream 读取了位图,然后将流中的数据存到Byte[]中,去掉前面54位的文件头后传到C++代码中,在C++代码中给图片buffer添加文件头后保存文件,保存的图片出现异常,跟多少位没有关系,这方面的处理是一致的
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在c中显示bmp位图
各位大虾,请教一下,怎么在c中显示bmp位图啊??
求c#大神指导
我想指导为什么创建不了用户 (NGUSER)?????rnrnrnrnrn private void btnSetNg_Click(object sender, EventArgs e)rn rn string strSql = "create user NGUSER identified by '9003' default tablespace std; grant connect,resource to NGUSER ; grant create any sequence to NGUSER ; grant create any table to NGUSER ; grant delete any table to NGUSER ; grant insert any table to NGUSER ; grant select any table to NGUSER ; grant unlimited tablespace to NGUSER ; grant execute any procedure to NGUSER ; grant update any table to NGUSER ; grant create any view to NGUSER ; "; rn rn //"CREATE USER NGUSER PROFILE DEFAULT IDENTIFIED BY 9003 DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;GRANT CREATE ANY TABLE TO NGUSER;GRANT UNLIMITED TABLESPACE TO NGUSER;GRANT CONNECT TO NGUSER;GRANT RESOURCE TO NGUSER;";rn rn tryrn rn Form1.oclConnection.Open();rn rn OracleCommand oclCommand = new OracleCommand(strSql, Form1.oclConnection);rn rnrn MessageBox.Show("创建成功");rnrn /*rn rn rn create user NGUSER identified by 9003; grant create session to NGUSER; grant create table to NGUSER; grant create tablespace to NGUSER; grant create view to NGUSER; rn rn */rnrnrn rn catch (Exception ex)rn rnrn MessageBox.Show("SQL语句出错!\n" + strSql.ToString() + "\n请检查:\n" + ex.ToString());rnrn rn finallyrn rn Form1.oclConnection.Close();rn rn FormEnterDatabase_Load(this,e);rn rn
C#求大神指导。。。
有一张表。。rn rntable arn(rnno char(9),rnna char(8),rnse char(4)rnrn)rnrn在连接数据库SQL server08后,我想将数据都显示在窗体中。。怎么实现呢。。求指点。。。
c与c#的区别与联系是什么
我在网上了解到的是c与c#并不像c与c++那样是前后继的关系,c#是微软的vj取了c的名字,那么c#和c完全没有关系吗,学习c#的时候需要从头学起,c的语法关键词之类的基本没用吗
以位图的方式保存画板
以位图的方式保存画板 一、              与自定义队列保存的不同点: 与前面用自定义对队列保存文件的方式不同,以位图方式保存是指在保存图片时,文件保存时不再记录所绘的各个形状,而是将画图的区域直接抓取下来,并记录各点的颜色;文件打开时也不再从数组中将各个形状对象逐个去处,而是在画图区域将与背景色不同的像素点以画图的颜色显现出来。 二、    ...
位图保存?
我现在在视类中画一个矢量图形,如一些直线,用类模板创建的CObArray,请问如果把它保存成BMP文件?
保存位图
想用VC做个抓图的程序,rn怎么做,抓一个指定区域然后保存为位图
保存位图?
为什么我下面的代码保存的位图漆黑一片?rnrn[code=C/C++]rnvoid CBitmapDlg::OnBtnBitmap() rnrn // TODO: Add your control notification handler code herern CClientDC dc( this );rn CDC dcMem;rn CRect rect;rn GetClientRect( &rect );rnrn // 位图文件头rn BITMAPFILEHEADER bmfh;rnrn // 位图信息头rn BITMAPINFO bmih;rn BYTE *pBytes;rnrn bmih.bmiHeader.biSize = sizeof( BITMAPINFOHEADER );rn bmih.bmiHeader.biWidth = rect.Width();rn bmih.bmiHeader.biHeight = rect.Height();rn bmih.bmiHeader.biPlanes = 1;rn bmih.bmiHeader.biBitCount = 16;rn bmih.bmiHeader.biCompression = BI_RGB;rn bmih.bmiHeader.biSizeImage = 0;rn bmih.bmiHeader.biXPelsPerMeter = 0;rn bmih.bmiHeader.biYPelsPerMeter = 0;rn bmih.bmiHeader.biClrUsed = 0;rn bmih.bmiHeader.biClrImportant = NULL;rnrn bmfh.bfType = 0x4d42;rn bmfh.bfSize = ( DWORD )( sizeof( BITMAPFILEHEADER ) + bmih.bmiHeader.biSize + bmih.bmiHeader.biClrUsed * sizeof( RGBQUAD ) + bmih.bmiHeader.biSizeImage); rn bmfh.bfReserved1 = 0;rn bmfh.bfReserved2 = 0;rn bmfh.bfOffBits = ( DWORD )( sizeof( BITMAPFILEHEADER ) + bmih.bmiHeader.biSize + bmih.bmiHeader.biClrUsed * sizeof( RGBQUAD ) ); rnrn dcMem.CreateCompatibleDC( &dc );rn dcMem.SetBkMode( TRANSPARENT );rn dcMem.MoveTo( 0, 0 );rn dcMem.LineTo( 100, 100 );rnrn CreateDIBSection( dcMem.m_hDC, &bmih, DIB_PAL_COLORS, ( void** )&pBytes, NULL, 0 );rnrn CFile file;rn if( file.Open( "c:\\Test.bmp", CFile::modeWrite | CFile::modeCreate ) )rn rn file.Write( &bmfh, sizeof( BITMAPFILEHEADER ) );rn file.Write( &bmih, bmih.bmiHeader.biSize + bmih.bmiHeader.biClrUsed * sizeof( RGBQUAD ) + bmih.bmiHeader.biSizeImage );rn file.Write( pBytes, rect.Width() * rect.Height() * 16 / 8 );rn file.Close();rn rn dcMem.DeleteDC();rnrn[/code]
C语言读8位位图并保存
用C语言读位图信息并保存,是用纯C写的,只能读8位256色.bmp图像
用纯C保存bmp位图?
请问如何用纯C将图片保存成bmp文件?rn多谢各位大侠指教!
求24位图转8位图的代码。
要灰度图
求位图分割、保存的思路和代码
我把一个256色位图文件分割成几个部分,每一个部分的边界都已经确定,并且可以显示在屏幕上,但是我想把每个分割的图保存,却碰到了麻烦。主要是我对位图的了解不是太深入,现在8位位图和24位位图的象素存储和颜色等都还不是太明了,就是从网上找了些代码,自己添加的分割功能,然后保存分割后的图出现了麻烦。rn还有就是如果24位的位图分割后如何存储,我没试过,但是想知道。分割前我是得到了每一个象素的数据,但是怎么把这些数据写入新的位图就不知道了,很多代码都是创建设备环境,直接全部写入,我是想用我感兴趣的象素数据写入新的位图文件。还有每行字节数被4整除我还不知道怎么处理,一个连续的缓冲区,不知道怎么处理单行(截取出的部分不是在连续的缓冲区)。rnrn写了这么多,有点乱,也可能没人感兴趣,不过我希望有懂得的朋友帮个忙,把思路和算法说一下,我不想要些从别处随便抄来的代码,思路是最重要的。
求保存bmp位图的简单代码
我已经把位图读取出来,并且经过处理,要把感兴趣的部分保存为另一个位图,但是结果都是文件生成了,图像却是空的。我觉得应该是文件头没处理好,反复试了试也没成功,希望有懂的朋友给段简单明了的代码,最好是能编译通过。我刚学图像处理,水平太菜,参考一下大家的思路。
用C#进行位图的读入、保存和处理
用C#进行位图的读入、保存和处理
急求摄像头采集到的位图图象保存的代码!!!
摄像头采集并保存成位图的代码!!!rn高手指教!!
C语言操作位图
我写的C语言操作位图 可惜还没有完成 不过可以借鉴一下
C# 如何将图片另存为单色位图bmp
如题C# 将图片 保存为单色 bmp 图片rn或则 操作 windows 自带的画图工具将 另存为单色的bmp图片
位图工具 用生产C语言位图代码
用于嵌入式 位图 代码的生成 生产C语言位图代码 ,希望对大家有用。
求:透明位图代码.
我在资源里加了个位图IDB_BMP2,显示在窗口的时候有白色的底,怎么让它透明呢?rn如果我是用的单文档程序,我改在哪个事件里实现?rn怎么实现 ?给个代码吧.
C#位图问题
谁知道C#中在bitmap中画的图片和一般的透明图片有什么区别啊
c#生成位图
我有一个RGB数组,想快速生成位图,但是现在速度不够理想,我用的C#的draw函数。想问一下,在C#里面,有没有更好的方法?
C#位图空白处的填充
在窗体中加载几幅图,然后实现了动画效果,但是想让 窗体背景色填充那些蓝绿色..rn让显示效果更好一些[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif][/img]rn[img=http://hi.csdn.net/attachment/201103/10/5337842_1299768590Jg2y.gif][/img]
关于Turbo C 中 位图格式的说明
Turbo C 中getimage(...) 读入位图后,我想修改位图,再putimage,不知位图在内存中的结构如何?找遍资料,还是找不到关于Turbo C 中 位图格式的说明.rn
c#位图问题
怎样将一张位图分解(上/下各一半 或者 左右各一半)保存为两张位图,怎么将分解后的两张位图还原成原来的一张位图?如果将分解后的一半保存为位图,一般保存在数据库中,怎么处理?又怎么还原成原来的一张位图?rnrn键盘问题:按下“N”键,返回“M”键,怎么实现?
c#位图操作问题???
在c#中如何通过已知的位图数据文件bmp.bin创建位图Bitmap对象?rn即设备发送上来位图文件的数据部分,byte[]存储,通过数据创建位图。
保存位图代码的一个疑问
[code=c]保存位图代码的一个疑问,代码来自:rnhttp://bbs.csdn.net/topics/20173554rnrn代码有个地方没看懂:rnrn // 获取该调色板下新的像素值rn GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize, (BITMAPINFO *)lpbi,DIB_RGB_COLORS);rnrn这句getdibits这个函数的作用是将位图像素 的的数据写到缓冲区域lpbi中的某个位置中!!1rnrnrn在getdibits之前有这么几句代码:rn lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);rn *lpbi = bi;rnrn 很明显是用来设置位图信息头的,rnrn可是我们的调色板结构体,代码却没有呈现,如何写到缓冲区中?rnrngetdibtis这个函数并不是将调色板写到缓冲区中。rnrnrnrnrnint SaveBitmapToFile(HBITMAP hBitmap, LPSTR lpFileName) //hBitmap 为刚才的屏幕位图句柄rn //lpFileName 为位图文件名rn HDC hDC; rn //设备描述表rn int iBits; rn //当前显示分辨率下每个像素所占字节数rn WORD wBitCount; rn //位图中每个像素所占字节数rn //定义调色板大小, 位图中像素字节大小 , 位图文件大小 , 写入文件字节数rn DWORD dwPaletteSize=0,dwBmBitsSize,dwDIBSize, dwWritten;rn BITMAP Bitmap; rn //位图属性结构rnBITMAPFILEHEADER bmfHdr; rn //位图文件头结构rn BITMAPINFOHEADER bi; rn //位图信息头结构 rnLPBITMAPINFOHEADER lpbi; rn //指向位图信息头结构rn HANDLE fh, hDib, hPal;rn HPALETTE hOldPal=NULL;rn //定义文件,分配内存句柄,调色板句柄rn rn //计算位图文件每个像素所占字节数rn hDC = CreateDC("DISPLAY",NULL,NULL,NULL);rn iBits = GetDeviceCaps(hDC, BITSPIXEL)*GetDeviceCaps(hDC, PLANES);rn DeleteDC(hDC);rn if (iBits <= 1)rn wBitCount = 1;rn else if (iBits <= 4)rn wBitCount = 4;rn else if (iBits <= 8)rn wBitCount = 8;rn else if (iBits <= 32)rn wBitCount = 24;rn //计算调色板大小rn if (wBitCount <= 8)rn dwPaletteSize=(1<
c#在一个面板中得到文字的位图
比如一个输入文本框,在选择字体后扩大出现在一个面板上,转为图片得到该文字的位图,以坐标的方式呈现...不知道怎么弄,求指点,,,
如何将一幅32位真彩位图保存1位的单色位图
谢谢!
c#调用c写的dll出错,求大神指导!!!
rn[code=csharp]rn [DllImport("__BANKER.dll", EntryPoint = "getdata", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]rn public static extern double getdata(StringBuilder sb, int nLen);rn[/code]rnrnrn这是c写的dll代码声明rn[code=c]rnextern "C" __declspec(dllexport) double zhuang(char *array,int N);rn[/code]rnrn结果:rn“尝试读取或写入受保护的内存,这通常表明其他内存已损坏。。。。”rn网上搜索很多是类型的问题,之前C#用的是char[],出问题,现在改成string ,stringbuilder还是这样。。。。
C#和C的区别?
请问C#和C具体有什么区别,他们之间有什么联系,要学好C#需要做些什么?
在代码中如何编辑位图?
我看到的位图一般只能draw,要如何才能edit位图呢?
C#与C语言的区别
有什么区别阿?
C语言与C#的区别
C#是三大主流OOP(面向对象编程)语言(C++,Java,C#)之一,发现两者之间的一些差别,随便写点,其中肯定有不足和遗漏之处,以后再补充纠正。   C语言诞生得非常之早,C语言的目标就是比汇编方便易用,同时不要损失汇编的表达能力。所以C语言可以看成是“高级的汇编”语言。C语言的源代码基本上可以非常容易地对应到汇编代码,而且可以不需要什么运行时环境的支持。C的特点,简单容易编译,灵活贴近底层。...
C/C++与C#的区别?
高手指点指点吧....
MFC中如何将位图的一部分拷贝到新的位图中去
例如:rn两个100*100的位图A和B.rn如何将A中(50,50,99,99)的部分拷贝到B中(0,0,49,49)中去.rn谢谢啦.
c#中把视频流中的某一帧保存成位图,有是什么方法?
我现在已经通过高人指点可以从摄象头获得视频流rn可是怎样从随机从视频流中保存图象呢?rn回调函数:LRESULT CALLBACK FrameCallbackProc(HWND hWnd,LPVIDEOHDR lpVHdr)rn在c#中该怎么使用?
C#中如何将导入的位图重画然后生成PNG格式的位图输出
在做二维码的时候发现生成的图片经放大后会变模糊,所以想知道怎么将其生成为矢量图,各位大神求教
生成24位位图 c 代码
生成24位位图 c 代码
用C语言读取BMP位图的代码
C语言打开BMP位图文件的代码,包括注解等
C# C/S MVP模式求指导
需要完成的项目是C/S的,通过以太网通信获取数据,并且显示到UI,采样频率为20MB/s,所以数据量是比较大,基本情况就是这样,现在刚刚开始,想请教一下软件设计上的问题。rn 一开始,我的程序就一个类,不是我不想分分层,而是那个时候没啥经验,然后看到项目小,很简单的,就那么做了,做完之后发现代码很混乱,修改起来很麻烦。rn 后来的项目么也就开始分分类了,把数据处理放在一个类一里面,然后通过注册事件来显示数据,类方法用public,在UI中直接通过类对象来调用方法,这样做比起之前的一个程序一个类的做法当然好了点,至少结构清晰了一点。rn 后来再做项目,发现其实数据处理逻辑跟UI逻辑老是搞混在一起,然后项目进行过程中,UI需要改动,或者逻辑上需要一些调整的时候,要花很大的力气去修改,诶,所以,想学学MVP的设计模式,不是之前不知道有这个模式,只是有时候没考虑那么多,恰好新项目,我想好好的,好好的按照设计设计再做编程。rn 现在的问题是,我很难把UI逻辑跟业务逻辑区分开来,实际的开发过程中,总是在UI中夹杂很多数据处理的东西,然后在设计上很明显Presenter跟View交互的太多了,只是简单实用注册事件-委托显示的方式来做,效率很低不说,其实我不懂如何避免P跟V的直接调用。rn 看到一篇博客,很好,但是感觉还是不太理解。http://www.cnblogs.com/artech/archive/2010/03/25/1696205.html
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池