首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Delphi中将HBitmap转换为字节数组

在Delphi中将HBitmap转换为字节数组
EN

Stack Overflow用户
提问于 2013-03-26 23:10:06
回答 1查看 1.8K关注 0票数 6

我试图将hBitmap转换为字节数组,但我不想使用unit Graphics中的TBitmap。我的输入图像是128x64x32bit。

代码语言:javascript
运行
复制
var TheBits: array of array of Cardinal;
begin   
  with info.bmiHeader do begin
    biWidth:=131;
    biHeight:=64;
    biSize:=SizeOf(TBITMAPINFOHEADER);
    biCompression:=BI_RGB;
    biBitCount:=32;
    biPlanes:=1;
    biSizeImage:=0;
  end; 

  DC := CreateCompatibleDC(0);    
  SetLength(TheBits, 128, 64);    
  GetDIBits(DC, BmpHandle, 0, 64,@TheBits[0][0],Info,DIB_RGB_COLORS);

这给了我一个很好的图像(当然是上下颠倒的),但是我不得不把131放到biWidth中,这对我来说没有什么意义。为什么不能是128呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-26 23:22:18

你太幸运了。你的数组实际上是128个完全独立的数组。当您设置维度时,Delphi恰好分配的每个数组与前一个数组非常接近,它们之间有12个字节的间隔,说明了每个动态数组中的各种记账数据。告诉API你的位图有131个像素宽,这会让API在为更窄的位图复制数据时跳过这些字节。

API需要一个连续的字节块,这与多维动态数组不同。多维动态数组实际上只是一个普通的动态数组,它的元素类型恰好是另一个动态数组。

要修复代码,您需要一个一维数组;将其长度设置为位图高度和宽度的乘积。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15640549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档