以下是引用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