<font color=red>? ? ? 如何将IMAGE中的数据倒入内存</font>(30分)

  • 主题发起人 主题发起人 cat.yy
  • 开始时间 开始时间
C

cat.yy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将IMAGE中的数据倒入内存,我将在内存定义一个数组
 
以 byte 形式倒入内存最好

大家随便说说吧
 
Image.picture.bitmap.scanline
自己看帮助吧,还有例子,example
 
你的意思是先在内存中设好数组,在把IMAGE中的图逐象素的读到那个数组中
这样也行,只是速度不够 处理也不够灵活
我要处理一些大图片,而且运算很复杂

<i>我想获得某加载图片的IMAGE在内存中存储图片的那个区域的起始指针</i>
(IMAGE存储的图片的区域应该是连续区域吧)
 
对于Tbitmap
可用:
Var
bh:^windows.Tbitmap;
Begin
Abitmap.Handletype:=bmDIB; //必须为设备无关位图才有内存指针
New(bh);
getObject(Abitmap.Handle,Sizeof(WIndows.Tbitmap),bh);
Apointer:=bh.bmBits; //得到位置,注意为逆行序存放的.
dispose(bh);
End;
 
bh.bmBits即首地址?

“逆行序存放”的意思是:指针上移(例:x := x-1)就是向下取址?
 
不是, bh.bmbits 指向 该图象的最后一行,到第一行 倒过来存放的。
而不是 从第一行到最后一行存放的。
以 800*600*24 bit 例
bmbits ---> 599 行
bmbits + 800*3 ---> 598 行
..
..
bmbits + 800*3*N ----> 600 -(N+1) 行
..
..
bmBits + 800*8*599 ----> 0 行
 
是了,
bh.bmbits是最后一行的地址
那我怎么知道有多少行呢,用image.picture.heigth得到?

IMAGE 加载图片时 仅仅读取象素数据而不读取文件头吗?
 
这个类型有一个SaveToStream的方法可以直接写入内存中。
另外创建TMemoryStream类型的变量,这是内存空间一种抽象,
用起来非常简单而且安全。希望你能够采纳。
 
to cat.yy:
你太懒了吧,
bh 里还有别的信息,很全面的。
bh.bmwidth;
bh.bmheight;
bh.bitplanes;
......................
 
不是我懒 是贪
谢谢大家
 
后退
顶部