以下是引用JHKCHEN在2012-12-14 22:38:34的发言:
本人研究了以下,vfp调用API恐难实现此功能
换个思路:假设有d:\1.bmp,如果能将该BMP的每一个点的BGR值存到一个数组中
就能实现此在全屏中找1.BMP是否存在的功能。
请高手指点如何将d:\1.bmp,如果能将该BMP的每一个点的BGR值存到一个数组中?
本人研究了以下,vfp调用API恐难实现此功能
换个思路:假设有d:\1.bmp,如果能将该BMP的每一个点的BGR值存到一个数组中
就能实现此在全屏中找1.BMP是否存在的功能。
请高手指点如何将d:\1.bmp,如果能将该BMP的每一个点的BGR值存到一个数组中?
将BMP的每一个点的BGR值存到一个数组中
程序代码:gnbmpfile=FOPEN("abc.bmp")&&&打开bmp文件
=FSEEK(gnbmpfile,10)
a=CTOBIN(FREAD(gnbmpfile,4),"s")
START=trueshi(a)&&&bmp文件像素开始处
=FSEEK(gnbmpfile,18)
a=CTOBIN(FREAD(gnbmpfile,4),"s")
bwidth=trueshi(a)&&&&图片宽
a=CTOBIN(FREAD(gnbmpfile,4),"s")
bheight=trueshi(a)&&&&图片高
=FSEEK(gnbmpfile,28)
a=CTOBIN(FREAD(gnbmpfile,2),"s")
IF a<>6144&&&检测是否为24位图片
MESSAGEBOX("此图不是真彩色图片")
RETURN
ENDIF
=FSEEK(gnbmpfile,START)
DIMENSION yanse(bwidth,bheight)&&&定义数组
****将颜色储存于数组中
FOR ii=1 TO bwidth
FOR jj=1 TO bheight
r=CTOBIN(FREAD(gnbmpfile,1),"s")
g=CTOBIN(FREAD(gnbmpfile,1),"s")
b=CTOBIN(FREAD(gnbmpfile,1),"s")
yanse(ii,jj)=trueyanse(a,b,c)
ENDFOR
endfor
=FCLOSE(gnbmpfile)
***将数组输出到文本文件
DISPLAY MEMORY LIKE yanse TO FILE yanse.txt noconsole
***打开文本文件
MODIFY FILE yanse.txt
****自定义函数,将十进制数进行反转
FUNCTION trueshi(shi)
shiliu=TRANSF(shi,"@0x")
shi1=SUBSTR(shiliu,3,2)
shi2=SUBSTR(shiliu,5,2)
shi3=SUBSTR(shiliu,7,2)
shi4=SUBSTR(shiliu,9,2)
shiliu="0x"+shi4+shi3+shi2+shi1
trueshi=&shiliu
RETURN trueshi
ENDFUNC
****自定义函数,将rgb保存为数字,减少占内存。
FUNCTION trueyanse(r,g,b)
shi1=SUBSTR(TRANSF(r,"@0x"),9,2)
shi2=SUBSTR(TRANSF(g,"@0x"),9,2)
shi3=SUBSTR(TRANSF(b,"@0x"),9,2)
shiliu="0x00"+shi3+shi2+shi1
trueshi=&shiliu
RETURN trueshi
ENDFUNC

坚持学习vfp,QQ:306805680







