Comments (4)
I'll work on adding limits to animation decoders such as GIF using the existing API, then see if there's any benefit to changing it once we have more internal use of the Limits.reserve()
API.
from image.
So I've prototyped the .reserved()
design and I can't say it's particularly great: https://github.com/Shnatsel/image/tree/raii-limits
There seems to be no way to put #[must_use]
on the returned Limits
. So it's easy to assume the method mutates the instance of the Limits
that you have when it actually doesn't. And I don't want to introduce a confusing API.
It is possible to put #[must_use]
on Limits and enforce the use of the return value that way!
from image.
On Discord, moulins suggested enforcing stacking of Limits
using a lifetime:
struct Limits<'a>(...);
impl<'a> Limit<'a> {
#[must_use]
pub fn reserved(&mut self, bytes: usize) -> ImageResult<Limits<'_>>;
}
from image.
I think it would be easier to think about this in the context of a specific decoder's use of the Limits
object. For some decoders, all the actual allocations happen in a dependency and we simply use the value in limits to set the relevant parameter for that crate. In other cases, the allocation might happen in this crate but be on the heap and outlive the specific function that does the allocation.
One other thing from looking at the Limits
struct is that I'm not particular sure why its methods are public in the first place? The main place you'd want to call them are from the implementations of decoders. But because decoders are generally either implemented within this crate or imported as dependencies (and thus would cause circular dependencies if their tried to use types from this crate) that doesn't really help.
from image.
Related Issues (20)
- Add in-place versions of all rotation operations HOT 1
- `DynamicImage::crop()` is slow because `to_image()` is slow HOT 1
- Cropping API doesn't check bounds, easy to misuse HOT 7
- EnumeratePixels and EnumerateRows should implement DoubleEndedIterator HOT 3
- Implement a `rows()` iterator on `SubImage` HOT 6
- how to convert a rgbaImage to opencv's Mat?
- Regression: Hot lib reload, unable to find __rust_alloc. HOT 6
- Increased generation loss in JPEG encoder HOT 1
- Broken link in docs HOT 2
- Should the next major release be 1.0? HOT 2
- Detect alpha on jpeg HOT 2
- Alternate versions of the crates which allow regular breaking changes HOT 7
- Animated WebP decoding error HOT 8
- “Corrupt RLE data” on simple BMP
- Make set_icc_profile function accessible
- Blur for images with alpha is incorrect, bleeds color from transparent pixels HOT 4
- Not reproducible crash in png module
- Error: PNG image and JPEG failed loading
- Calling `resize` returns a `ImageBuffer <Rgba<_>, _>` for `DynamicImage` HOT 1
- updating from image v0.24 to image v0.25 is causing colour distortions HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from image.