注册 登录
编程论坛 VFP论坛

请教从文件读入图片文件,能直接转换吗?

liunis 发布于 2023-06-29 18:04, 1055 次点击
比如从c盘 读入一个 aa.jpg 格式的文件,通常是将aa.jpg 转换为aa.bmp 需要保存一个垃圾文件,再将aa.bmp 转化为图片数据流  filetostr(aa.bmp)  ,保存到备注字段后再删除aa.bmp

有没有捷径, filetostr(aa.jpg)  不用通过另存文件,只直 转为内存BMP数据流,省去中间步骤。

数据量大时十分缓慢。有什么方法
13 回复
#2
吹水佬2023-06-29 21:25
到“转换为aa.bmp”之前的数据不就是了吗
#3
liunis2023-06-29 22:20
谢谢大佬的回复。到“转换为aa.bmp”之前的数据是JPG格式的,嵌在DBF表格里的图片pictureval必须是BMP格式,否则是显示不出来,就是能显出来,但导出到EXCEL表时会丢失图片。经反复研究,发现是BMP格式的图片导出到EXCEL就不会出现丢失
#4
吹水佬2023-06-29 22:35
回复 3楼 liunis
到“转换为aa.bmp”之前的数据是JPG格式的?
从jpg到bmp,中间有个过程,转换为aa.bmp”之前的意思明白了吧
#5
吹水佬2023-06-30 06:38
jpg到bmp再到dbf,最终还是保存在磁盘文件。dbf保存jpg文件路径就可以,需要时 PictureVal=FILETOSTR(jpg) 不是更简单快捷吗。
#6
laowan0012023-06-30 07:22
经反复研究,发现是BMP格式的图片导出到EXCEL就不会出现丢失

楼主的意思不是显示的问题,而是导出时的问题,如果确实是这样的话,看来是个绕不过去的坎儿
#7
liunis2023-06-30 09:40
是的。总的来说是:保存在备注字段的数据 必须是BMP的源码。导出EXCEL时将数据码粘到EXCEL时,如何是JPG格式时会有大部分图片丢失,而BMP就不会。
#8
yiyanxiyin2023-06-30 16:28
建议数据库只保存路径, 一般都是这么干的
#9
liunis2023-06-30 17:31
好的谢谢,有问题是尽可能解决,实在没法才将就,是一种学习的态度。
#10
sam_jiang2023-07-01 11:57
图片格式之间的转换,论坛里以前有人发过贴,搜一下就可以用。
#11
hsfisher2025-12-02 08:30
学习了
#12
foxfans2025-12-02 17:36
只有本站会员才能查看附件,请 登录

(除非敏感应用)不建议图片保存在数据库中,一般存路径即可,更方便维护
#13
wengjl2025-12-04 08:50
以下是引用foxfans在2025-12-2 17:36:22的发言:


(除非敏感应用)不建议图片保存在数据库中,一般存路径即可,更方便维护


感谢 foxfans 提供了一种新方法,学习理解进行中!再次感谢!
#14
sam_jiang2025-12-04 10:14
以前下载个myimg.fll库,可以轻松处理图片转换,论坛里好像可以下载。

 myimg.fll 图像处理库用法详解
myimg.fll 是一个功能强大的图像处理库,适用于 Visual FoxPro (VFP) 开发环境,提供丰富的图像操作功能。以下是其核心用法说明:

 核心功能
图像打开与保存

打开图像:支持从屏幕、剪贴板或文件中加载图像。
vfp
Copy Code
hImg = ImgOpen(_FROM_SCREEN)  && 从屏幕抓取图像
hImg = ImgOpen(_FROM_CLIPBORD)  && 从剪贴板加载图像
hImg = ImgOpen("path\image.jpg")  && 从文件加载图像
保存图像:支持多种格式(BMP、GIF、JPG、PNG、TIF)。
vfp
Copy Code
ImgSave(hImg, "output.bmp", _IMG_BMP)  && 保存为BMP格式
ImgSave(hImg, "output.jpg", _IMG_JPG)  && 保存为JPG格式
图像属性获取

尺寸获取:
vfp
Copy Code
? "宽度:", ImgGetWidth(hImg)
? "高度:", ImgGetHeight(hImg)
格式获取:
vfp
Copy Code
? "格式:", ImgGetFormat(hImg)  && 返回格式代码(如1=BMP, 2=GIF)
图像编辑操作

裁剪:
vfp
Copy Code
ImgCrop(hImg, 100, 100, 200, 200)  && 裁剪矩形区域(左上角坐标+宽高)
缩放:
vfp
Copy Code
ImgResize(hImg, 300, 200)  && 调整为300x200像素
旋转:
vfp
Copy Code
ImgRotate(hImg, 90)  && 顺时针旋转90度
错误处理

获取错误信息:
vfp
程序代码:

If hImg == ""
    MessageBox("打开图像失败: " + ImgGetLastError())
EndIf

 使用步骤
加载库:
vfp
Copy Code
Set Library To myImg
调用顺序:
vfp
程序代码:

hImg = ImgOpen(_FROM_SCREEN)  && 打开图像
If hImg == ""
    MessageBox("打开失败")
    Return
EndIf
ImgSave(hImg, "output.bmp", _IMG_BMP)  && 处理图像
ImgClose(hImg)  && 关闭图像句柄

 关键宏定义
vfp
程序代码:

#define _FROM_SCREEN 1
#define _FROM_CLIPBORD 2
#define _IMG_BMP 1
#define _IMG_GIF 2
#define _IMG_JPG 3
#define _IMG_PNG 4
#define _IMG_TIF 5

 注意事项
错误处理:所有操作失败时,ImgGetLastError() 可返回具体错误信息。
资源管理:操作完成后务必调用 ImgClose(hImg) 释放资源
1。
兼容性:确保 myimg.fll 与 VFP 版本兼容,建议使用官方提供的最新版本
2。
 示例代码
vfp
程序代码:

Clear
Set Library To myImg

* 打开屏幕截图
hImg = ImgOpen(_FROM_SCREEN)
If hImg == ""
    MessageBox("截图失败")
    Return
EndIf

* 保存为BMP格式
ImgSave(hImg, "screenshot.bmp", _IMG_BMP)

* 获取图像尺寸
? "宽度:", ImgGetWidth(hImg)
? "高度:", ImgGetHeight(hImg)

* 关闭图像
ImgClose(hImg)

通过以上步骤,您可以在 VFP 中实现高效、灵活的图像处理功能。
1