TbitMap 的问题 . 急急.(100分)

  • 主题发起人 主题发起人 xwings
  • 开始时间 开始时间
X

xwings

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在在写一个图象处理程序. 像要可以直接操作图象数据, 就是用指针直接操作内存.
我开始用的是Tbitmap.scanline[height-1]获取存储图象数据的首地址.后来我把Tbitmap.handleType
改为bmDDB时(原来是bmDIB,速度较慢) 发现操作指针指向的内存时,图象不在发生变化.轻各位高手指点.


如何获取图象存储的内存区域. 不要用savetoStream 这样也很慢地. 我需要很高的速度要求.


ps: API 的createBitmap函数 中 有个参数是图象数据的地址指针. 我分配了空间,并且创建了位图.
可是发现那个内存区域没有图象数据,为何故?

有什么好办法可以满足我的需要? 请指教.

回答之后再加200分.

 
>>

我用CreateCompatibleBitmap()创建一个位图.
然后用getobject 得到这个位图的参数.
其中 width height pixelformat 都是正确的. 就是bit 即图象数据指针是空,不知为什么?

各位知道的来看看啊.
 
让我下去看看
 
>> 后来我把Tbitmap.handleType 改为bmDDB时(原来是bmDIB,速度较慢)

我觉的不慢呀? 你们的要求如果很高,就用ASM 快很多哦!
 
那你说如何用ASM呢? 呵呵
 
用ASM可不是我 瞎想出来的哦,在Delphi中可以用嵌入式汇编,
asm
mov XXXX
...
end;

 
这个我早就试过了. move 函数就是用汇编写的. 速度仍然很慢的.
 
xwings:

速度问题可以这样解决:加内存、换显卡、升级CPU。。。
 
没好的算法,机器再快也没用,我们mmx指令还是不能满足要求
 
试试Tbitmap的GetDIBSizes,uncDIBBits,SetDIBits然后将改变过的图象回填到
Tbitmap,刷新显示界面即可.
chenxi0209_cn@sina.com
 
你用在哪对速度要求要怎么高。
 
这个我已经解决了. 方法是使用第三方的组件啦.

谢谢各位
 
是哪一个第三方组件可以满足阁下这么高的性能要求?
按照我的理解,处理位图最快的第三方的组件应该是FastLIB库,其次是Graphics32库,
有一个DIBUltra库快虽快,稳定性是在太差。
敢问阁下使用的是哪一个库?确实很感兴趣。
 
同道中人拉, 我用fastdib

不过有个问题想请教楼上, 就是 fastdib的 loadfromFile调入BMP的方法好像有问题. 我看了一下源码
就是在设置文件指针位置时候出现了负数定位 出现Integer overflow ;(
不知你用的哪个版本会不会出问题?
如果正常的话,可否发个给我? thx.
 
我用的没有这个问题。FastLIB的站点很是奇怪,我是通过SafeWeb这样的二次代理
才连上去的。你发个邮件到kundeng@sina.com来吧,我把新的FastLIB库给你。是今年
7月份下的,以后好像没有大的修改了。
其他的朋友要也请说一声,俺好一并发了。
 
收到了. thx
 
不过还是一样/
 
后退
顶部