保存图片 - SaveImageFromPtr
函数简介
将内存中的图片保存到指定文件。此函数可以将图片对象保存为常见的图片格式文件(如PNG、JPG、BMP等),保存格式由文件扩展名决定。支持保存透明度信息(PNG格式)和压缩质量设置(JPG格式)。
接口名称
SaveImageFromPtr
DLL调用
int SaveImageFromPtr(long ola, long image_ptr, string file_path)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。image_ptr
(长整型数): 要保存的图片句柄。file_path
(字符串): 保存的目标文件路径,包括文件名和扩展名。支持的格式包括:- .png:支持透明度,无损压缩
- .jpg:不支持透明度,有损压缩
- .bmp:不压缩,文件较大
示例:
// 加载图片并另存为不同格式
long image = LoadImage(ola, "D:\\test\\source.png");
if (image != 0) {
// 保存为PNG格式(保留透明度)
int ret = SaveImageFromPtr(ola, image, "D:\\test\\output.png");
if (ret == 1) {
printf("PNG格式保存成功\n");
}
// 保存为JPG格式
ret = SaveImageFromPtr(ola, image, "D:\\test\\output.jpg");
if (ret == 1) {
printf("JPG格式保存成功\n");
}
// 保存为BMP格式
ret = SaveImageFromPtr(ola, image, "D:\\test\\output.bmp");
if (ret == 1) {
printf("BMP格式保存成功\n");
}
FreeImagePtr(ola, image);
}
// 创建新图片并保存
long new_image = CreateImage(ola, 200, 200);
if (new_image != 0) {
// 绘制一些内容
DrawRectangle(ola, new_image, 50, 50, 150, 150, 0xFF0000);
DrawCircle(ola, new_image, 100, 100, 30, 0x00FF00);
// 保存绘制结果
if (SaveImageFromPtr(ola, new_image, "D:\\test\\drawing.png") == 1) {
printf("绘制结果保存成功\n");
} else {
printf("保存失败\n");
}
FreeImagePtr(ola, new_image);
}
// 确保目标目录存在
char save_path[256] = "D:\\test\\screenshots";
_mkdir(save_path); // 创建目录
// 保存带时间戳的文件名
time_t now;
time(&now);
struct tm* timeinfo = localtime(&now);
char filename[100];
strftime(filename, sizeof(filename), "screenshot_%Y%m%d_%H%M%S.png", timeinfo);
char full_path[512];
sprintf(full_path, "%s\\%s", save_path, filename);
// 保存图片
long screen = CaptureScreen(ola, 0, 0, 1920, 1080);
if (screen != 0) {
if (SaveImageFromPtr(ola, screen, full_path) == 1) {
printf("截图保存成功:%s\n", full_path);
}
FreeImagePtr(ola, screen);
}
COM调用
int SaveImageFromPtr(long image_ptr, string file_path)
参数定义:
image_ptr
(长整型数): 要保存的图片句柄。file_path
(字符串): 保存的目标文件路径,包括文件名和扩展名。支持的格式包括:- .png:支持透明度,无损压缩
- .jpg:不支持透明度,有损压缩
- .bmp:不压缩,文件较大
示例:
# 加载图片并另存为不同格式
image = ola.LoadImage("D:\\test\\source.png")
if image != 0:
# 保存为PNG格式(保留透明度)
if ola.SaveImageFromPtr(image, "D:\\test\\output.png") == 1:
messagebox("PNG格式保存成功")
# 保存为JPG格式
if ola.SaveImageFromPtr(image, "D:\\test\\output.jpg") == 1:
messagebox("JPG格式保存成功")
# 保存为BMP格式
if ola.SaveImageFromPtr(image, "D:\\test\\output.bmp") == 1:
messagebox("BMP格式保存成功")
ola.FreeImagePtr(image)
# 创建新图片并保存
new_image = ola.CreateImage(200, 200)
if new_image != 0:
# 绘制一些内容
ola.DrawRectangle(new_image, 50, 50, 150, 150, 0xFF0000)
ola.DrawCircle(new_image, 100, 100, 30, 0x00FF00)
# 保存绘制结果
if ola.SaveImageFromPtr(new_image, "D:\\test\\drawing.png") == 1:
messagebox("绘制结果保存成功")
else:
messagebox("保存失败")
ola.FreeImagePtr(new_image)
# 确保目标目录存在
import os
from datetime import datetime
save_path = "D:\\test\\screenshots"
os.makedirs(save_path, exist_ok=True)
# 保存带时间戳的文件名
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"screenshot_{timestamp}.png"
full_path = os.path.join(save_path, filename)
# 保存图片
screen = ola.CaptureScreen(0, 0, 1920, 1080)
if screen != 0:
if ola.SaveImageFromPtr(screen, full_path) == 1:
messagebox(f"截图保存成功:{full_path}")
ola.FreeImagePtr(screen)
返回值
整型数:
- 0: 保存失败
- 1: 保存成功
注意事项
- 支持的文件格式由文件扩展名决定,常用格式包括:
- .png:支持透明度,无损压缩
- .jpg:不支持透明度,有损压缩
- .bmp:不压缩,文件较大
- 保存前请确保目标目录存在且有写入权限
- 如果目标文件已存在,将被覆盖
- 建议使用绝对路径以避免路径问题
- 对于需要频繁保存的场景(如截图),建议使用时间戳或序号来避免文件名冲突