mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-27 03:06:57 -06:00
A PNG, JPEG, GIF or WebP image that takes more than the decode allowance as RGBA (2 GiB, 512 MiB in the web app), such as a 24000 × 24000 JPEG, was placed with the warning "too large to draw" and then drew as a crossed gray box on the canvas and was left out of raster exports. A 16-bit PNG whose decoded samples were past the allowance was shown the same way, with the same warning, although its RGBA fits. The renderer now decodes such an image at the largest size, keeping its proportions, that fits the allowance as RGBA. Each pixel of the result is the mean of the image's pixels it covers. A PNG that isn't interlaced is read a row at a time; other images are decoded whole when their decoded samples fit the allowance. A 16-bit PNG that isn't interlaced and whose RGBA fits is read a row at a time at its own size. An image of more pixels than the allowance has bytes still draws as the crossed box, and so does one whose decoded samples are past the allowance, other than a PNG that isn't interlaced. The renderer decodes an image at reduced size only while the result and the memory reading it takes (the image decoded whole, or the PNG reader's row buffers) fit beside the images being painted; otherwise the image is not decoded on that render (on the canvas it draws as the crossed box) and is tried again on the next render. The document keeps the whole file for saving and export. A placed document's saved preview past the allowance is decoded the same way, at the size it is drawn at or at the reduced size when that is smaller. Open, Place and the Links panel say "an image of W × H pixels is shown at reduced size" for an image drawn smaller. They say nothing for an image drawn at its own size, and they say "too large to draw" for one that is not drawn at reduced size. Docs: docs/mcp.md, docs/target-app-parity.md (the crossed box's line now names an image over the allowance that can't be drawn at reduced size).
53 lines
2.0 KiB
TOML
53 lines
2.0 KiB
TOML
[package]
|
|
name = "vectorcraft-render"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
description = "VectorCraft renderer: document to pixels (vello_cpu backend)"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
vectorcraft-geom = { workspace = true }
|
|
vectorcraft-color = { workspace = true }
|
|
vectorcraft-doc = { workspace = true }
|
|
vectorcraft-text = { workspace = true }
|
|
vectorcraft-effects = { workspace = true }
|
|
vectorcraft-brush = { workspace = true }
|
|
vello_cpu = { workspace = true }
|
|
# Filter types (Gaussian blur, drop shadow) are not re-exported by vello_cpu 0.2.
|
|
vello_common = { version = "0.2", default-features = false }
|
|
image = { workspace = true }
|
|
flate2 = { workspace = true }
|
|
jpeg-encoder = { workspace = true }
|
|
gif = { workspace = true }
|
|
# TIFF LZW compression (MIT OR Apache-2.0; already used by the image crate's TIFF reader).
|
|
weezl = "0.2"
|
|
# PNG rows read one at a time (MIT OR Apache-2.0; already used by the image crate's PNG reader).
|
|
png = "0.18"
|
|
log = { workspace = true }
|
|
|
|
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
|
|
vello_cpu = { workspace = true, features = ["multithreading"] }
|
|
|
|
# The shared image store's budget (src/images.rs) follows the installed memory, which it reads with GlobalMemoryStatusEx
|
|
# through winsafe's safe wrappers over Win32 (MIT), which vectorcraft-cli's src/perf.rs also uses.
|
|
[target.'cfg(windows)'.dependencies]
|
|
winsafe = { version = "0.0.29", default-features = false, features = ["kernel"] }
|
|
|
|
[dev-dependencies]
|
|
vectorcraft-testkit = { workspace = true }
|
|
# A variable font built in code (no font file is committed).
|
|
vectorcraft-text = { workspace = true, features = ["test-fonts"] }
|
|
# Live-effect plug-ins the cache tests install, written in WebAssembly text.
|
|
vectorcraft-plugins = { workspace = true }
|
|
wat = { workspace = true }
|
|
# Decoders the export tests read their files back with.
|
|
image = { workspace = true, features = ["tga"] }
|
|
tiff = "0.11"
|
|
# Reads the PSD exports back (MIT OR Apache-2.0).
|
|
psd = "0.3"
|
|
proptest = { workspace = true }
|
|
serde_json = { workspace = true }
|