QPicture类

QPicture类是Qt库中用于记录和回放QPainter指令的工具,支持跨平台、无分辨率依赖的绘制,常用于实现打印预览和图像操作。它提供了一系列方法如load、save和play以处理图片数据。

 

QPicture类是一个记录和回放QPainter命令的绘制设备。 

Header:#include <QPicture>
CMake:find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake:QT += gui
Inherits:<<< QPaintDevice

【详细描述】

一张图片会以独立于平台的格式将 painter 命令序列化到 IO 设备上。它们有时被称为元文件。

Qt 图片使用一种专有的二进制格式,这与许多窗口系统上的原生图片(元文件)格式不同,Qt图片对其内容没有限制,可以在控件或像素图上绘制一切(例如: fonts, pixmaps, regions, transformed等),也可以存储在一张图片中。
 

QPicture与分辨率无关。一个QPicture可以显示在不同的设备上(例如svg、pdf、ps、打印机和屏幕),看起来都相同,这正是所见即所得的打印预览所必须的。QPicture在默认系统dpi中运行,并根据窗口系统缩放 painter 以匹配分辨率的差异。

  • 以下是记录图片的示例:
QPicture picture;
QPainter painter;
painter.begin(&picture);           // paint in picture
painter.drawEllipse(10,20, 80,70); // draw an ellipse
painter.end();                     // painting done
picture.save("drawing.pic");       // save picture

 请注意,在每次调用QPainter::begin() 函数时, painter 命令的列表都会被重置。

  • 重播图片的示例:
QPicture picture;
picture.load("drawing.pic");           // load picture
QPainter painter;
painter.begin(&myImage);               // paint in myImage
painter.drawPicture(0, 0, picture);    // draw the picture at (0,0)
painter.end();                         // painting done

图片也可以使用play()来绘制。一些关于图片的基本数据可用size(), isNull() and boundingRect()访问。


【公有函数】

QPicture::QPicture(int formatVersion = -1)

构造空图片。

格式版本参数可用于创建一个由使用Qt的早期版本编译的应用程序可以读取的Q图片。

默认格式版本是-1,它表示当前版本。

QPicture::QPicture(const QPicture &pic)

构造一个图片的副本。

由于隐式共享,这个构造函数非常快。

virtual  QPicture::~QPicture()

QRect

boundingRect() const

返回图片的边界矩形,如果图片不包含数据,则返回一个无效的矩形。
const char *

data() const

返回一个指向图片数据的指针。该指针只有在在这张图上调用下一个非常量函数之前才有效。如果图片中不包含任何数据,则返回的指针为0。
bool

isNull() const

如果图片不包含任何数据,则返回true;否则返回false。
bool

load(const QString &fileName)

从文件名指定的文件中加载图片,如果成功则返回true;否则将使图片无效并返回false。
bool

load(QIODevice *dev)

重载load函数,这里dev是用于加载的设备。
bool

play(QPainter *painter)

 使用Painter回放图片,如果成功则返回true;否则返回false。

这个函数与QPainter::drawPicture() 和 (x, y) = (0, 0) 完全相同。

注意:Painter的状态并没有被这个功能保存下来。

bool

save(const QString &fileName)

将图片保存到文件名指定的文件中,成功后返回true,否则返回false。
bool

save(QIODevice *dev)

重载save函数,这里dev是用于保存的设备。
void

setBoundingRect(const QRect &r)

将图片的边界矩形设置为r,这将覆盖自动计算的值。
virtual void

setData(const char *data, uint size)

直接设置图片尺寸。此函数将复制输入数据。
uint

size() const

返回图片数据的大小。
void

swap(QPicture &other)

用这张照片交换其他图片。这个操作非常快,而且永远不会失败。
QPicture &operator=(const QPicture &p)
QPicture &operator=(QPicture &&other)

QDataStream &operator<<(QDataStream &s, const QPicture &r)
QDataStream &operator>>(QDataStream &s, QPicture &r)

<<<返回上一级【QPaintDevice】

<<<返回根页面 

<think>好的,我需要解决用户在旧版Apache POI 3.x中使用Picture的getSuggestFileExtension方法的问题。首先,我得确认这个方法在3.x版本中是否存在,因为有时候方法可能是在后续版本中添加的。根据用户提到的引用[3],里面有一个FileInputStream的例子,但没直接提到Picture。 接下来,我应该回顾Apache POI的版本历史。记得在旧版本中,处理图片的部分可能位于HSSF包中,用于处理Excel的.xls格式。Picture可能在org.apache.poi.hssf.usermodel包下。而getSuggestFileExtension方法的作用是获取图片建议的文件扩展名,比如PNG、JPEG等。 然后,我需要检查3.x版本的文档或源码,确认该方法是否存在。假设存在的话,使用方式可能是先创建HSSFPatriarch对象来插入图片,然后通过Picture实例调用getSuggestFileExtension。代码示例可能涉及创建Workbook、添加图片数据、获取扩展名等步骤。 关于依赖配置,Apache POI 3.x需要核心库和HSSF模块。Maven依赖应包括poi和poi-ooxml,但需要注意版本号是否正确。可能需要确认3.10.1是否属于3.x系列,以及是否有兼容性问题。 用户可能遇到的常见问题包括方法不存在或路径错误,需要提示他们检查版本号,确认导入正确的,以及处理可能的异常。最后,总结步骤并给出建议,确保依赖配置正确,代码示例无误,并提醒版本差异可能带来的问题。</think>### 如何在Apache POI 3.x中使用`Picture.getSuggestFileExtension`方法 #### 1. **方法背景与版本兼容性** 在Apache POI 3.x版本中,`Picture`属于`HSSF`模块(处理Excel 97-2003格式的.xls文件),位于包`org.apache.poi.hssf.usermodel`中。`getSuggestFileExtension()`方法用于根据图片数据格式返回建议的文件扩展名(如`.png`、`.jpeg`等)[^3]。 #### 2. **使用步骤** **依赖配置(Maven)** 需添加以下依赖(以3.10.1为例): ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10.1</version> </dependency> ``` **代码示例** ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFPatriarch; import org.apache.poi.hssf.usermodel.HSSFPicture; public class PictureExample { public static void main(String[] args) throws Exception { // 创建Workbook和绘图对象 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFPatriarch patriarch = workbook.createSheet().createDrawingPatriarch(); // 加载图片数据(假设已读取图片字节流) byte[] imageData = Files.readAllBytes(Paths.get("image.png")); // 插入图片并获取Picture对象 int pictureIndex = workbook.addPicture(imageData, HSSFWorkbook.PICTURE_TYPE_PNG); HSSFPicture picture = patriarch.createPicture(workbook.getAllPictures().get(pictureIndex)); // 调用方法获取扩展名 String extension = picture.getSuggestFileExtension(); System.out.println("建议文件扩展名: " + extension); // 输出: png } } ``` #### 3. **常见问题与解决** - **方法不存在错误**:若提示`getSuggestFileExtension`未定义,请检查POI版本是否为3.9+,早期版本可能未提供此方法[^1]。 - **依赖冲突**:确保依赖中未混用新旧版本POI库(如同时引入3.x和4.x)。 - **图片型支持**:需通过`HSSFWorkbook.PICTURE_TYPE_XXX`指定正确的图片型(如`PICTURE_TYPE_JPEG`)[^3]。 #### 4. **总结** 在Apache POI 3.x中,通过`HSSFPicture`调用`getSuggestFileExtension()`可获取图片扩展名,需确保依赖配置正确且版本兼容。此方法适用于处理Excel 97-2003文件的图片元数据操作。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值