ispyisail
f6f53e3f52
Stop re-encoding unchanged pictures on every save
...
DiagramImageItem::toXml() PNG-encoded every picture on every save,
autosave and copy, whether or not it had changed. That is most of the
cost of pictures in a project: resaving one holding 60 of them took
6.2 s and now takes 3.8 s.
The PNG bytes are now kept and reused while QPixmap::cacheKey() still
matches, so any edit (replace, crop, mirror, transparency) re-encodes
without each of those functions having to invalidate anything. On load
the cache is filled with the file's own bytes, so the first save
encodes nothing either.
Output is byte-identical to before on the example projects. A picture
whose PNG came from another encoder now keeps its original bytes
instead of being re-encoded; the pixels are identical.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01G2d2Zi8BfrYRPX88zhaoFG
2026-09-27 16:43:11 +13:00
..
2026-09-24 15:17:17 +02:00
2026-09-26 20:06:07 +12:00
2026-09-25 15:09:21 +02:00
2026-01-16 15:24:35 +01:00
2026-01-26 18:47:43 +01:00
2026-09-26 07:12:57 +12:00
2026-09-25 17:24:17 +12:00
2026-09-22 21:56:31 +12:00
2026-08-17 10:25:44 +02:00
2026-09-18 14:31:49 +12:00
2026-09-22 09:07:27 +02:00
2026-09-25 20:44:02 +12:00
2026-07-31 09:52:32 +12:00
2026-09-24 09:59:21 +02:00
2026-08-11 11:48:58 +12:00
2025-05-22 21:33:32 +02:00
2026-09-27 16:43:11 +13:00
2026-01-16 15:24:35 +01:00
2026-09-07 10:44:30 +02:00
2026-01-16 15:24:35 +01:00
2026-09-17 05:41:50 -05:00
2026-09-23 02:47:25 +02:00
2026-09-17 05:41:50 -05:00
2026-09-25 23:25:27 +12:00
2026-01-16 15:24:35 +01:00
2026-09-24 22:20:43 +12:00
2026-08-23 18:25:23 +02:00
2026-09-26 08:21:48 +02:00
2026-09-24 22:30:20 +12:00
2026-09-24 10:30:01 +02:00
2026-01-16 15:24:35 +01:00
2026-08-09 09:11:40 +02:00
2026-08-09 09:11:40 +02:00
2026-09-13 02:00:50 +12:00
2026-09-11 20:12:09 +03:00
2026-09-26 08:22:12 +12:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-26 08:43:42 +02:00
2026-09-26 07:37:38 +12:00
2026-09-26 21:18:35 +12:00
2026-09-26 21:06:13 +12:00
2026-09-25 20:44:02 +12:00
2026-09-10 22:44:27 +02:00
2026-09-26 21:34:02 +12:00
2026-09-26 21:34:02 +12:00
2026-08-03 13:19:51 +12:00
2026-01-16 15:24:35 +01:00
2026-09-12 23:06:15 +12:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-20 21:56:43 +02:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-08-08 00:32:31 +02:00
2026-01-16 15:24:35 +01:00
2026-09-09 11:45:36 +12:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-26 10:22:50 +12:00
2026-09-26 09:15:35 +12:00
2026-09-23 16:37:45 +12:00
2026-08-22 11:25:47 +02:00
2026-07-14 19:27:16 +02:00
2026-01-16 15:24:35 +01:00
2026-09-23 09:20:31 +12:00
2026-09-22 09:07:27 +02:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-07 20:54:18 +12:00
2026-09-26 12:26:58 +02:00
2026-09-26 21:17:19 +12:00
2026-09-07 10:44:30 +02:00
2026-09-07 10:44:30 +02:00
2026-08-08 21:53:20 +12:00
2026-04-26 10:48:47 +02:00
2026-07-14 19:27:16 +02:00
2026-01-16 15:24:35 +01:00
2026-08-08 00:32:31 +02:00
2026-01-16 15:24:35 +01:00
2026-09-19 12:22:24 -05:00
2026-01-16 15:24:35 +01:00
2026-08-09 09:11:40 +02:00
2026-01-16 15:24:35 +01:00
2026-09-19 12:22:24 -05:00
2026-05-13 19:42:11 +02:00
2026-09-23 16:37:45 +12:00
2026-08-04 16:36:23 +12:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-26 10:36:40 +12:00
2026-09-26 10:22:50 +12:00
2026-09-07 10:44:30 +02:00
2026-01-16 15:24:35 +01:00
2026-08-08 08:09:45 +02:00
2026-08-06 21:37:40 +02:00
2026-08-09 19:25:56 +02:00
2026-08-06 21:37:40 +02:00
2026-09-03 15:05:22 +02:00
2026-04-19 10:44:52 +02:00
2026-09-16 15:40:41 +12:00
2026-09-16 15:40:41 +12:00
2026-09-17 00:07:46 +02:00
2026-06-20 22:31:06 +12:00
2026-09-24 21:41:00 +12:00
2026-08-11 11:33:28 +12:00
2026-01-16 15:24:35 +01:00
2026-09-20 22:58:08 +02:00
2026-09-26 21:17:19 +12:00
2026-09-25 20:44:02 +12:00
2026-09-25 20:44:02 +12:00
2026-09-18 18:28:48 +02:00
2026-08-12 12:29:56 +02:00
2026-09-23 18:38:38 +02:00
2026-09-23 16:47:07 +12:00
2026-09-26 10:22:50 +12:00
2026-09-26 10:22:50 +12:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-26 12:26:58 +02:00
2026-09-26 12:26:58 +02:00
2026-09-20 10:44:09 -05:00
2026-09-20 10:44:09 -05:00
2026-09-16 18:51:34 +12:00
2026-09-16 18:51:34 +12:00
2026-09-17 23:19:59 +12:00
2026-09-17 23:19:59 +12:00
2026-08-05 05:26:57 +12:00
2026-08-05 05:26:57 +12:00
2026-09-21 22:05:31 +02:00
2026-09-20 12:20:01 -05:00
2026-09-24 15:17:17 +02:00
2026-09-24 15:17:17 +02:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-20 12:45:07 -05:00
2026-09-19 12:26:06 -05:00
2026-08-16 07:16:33 +02:00
2026-01-16 15:24:35 +01:00
2026-09-17 00:07:46 +02:00
2026-07-17 10:25:49 +02:00
2026-08-08 00:32:31 +02:00
2026-01-16 15:24:35 +01:00
2026-09-17 00:07:46 +02:00
2026-09-17 00:07:46 +02:00
2026-08-09 01:34:22 +02:00
2026-01-16 15:24:35 +01:00
2026-09-17 00:07:46 +02:00
2026-01-16 15:24:35 +01:00
2026-07-17 10:29:13 +02:00
2026-07-17 10:29:13 +02:00
2026-09-26 21:34:02 +12:00
2026-09-26 21:34:02 +12:00
2026-09-26 10:22:50 +12:00
2020-09-07 22:03:40 +02:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-20 22:58:08 +02:00
2026-08-08 12:31:45 +02:00
2026-09-17 00:07:46 +02:00
2026-09-17 00:07:46 +02:00
2026-06-11 12:39:43 +12:00
2026-06-11 12:39:43 +12:00