pub struct DecodeSize {
pub width: Option<u32>,
pub height: Option<u32>,
}Expand description
The image stores, for an application that loads its own pictures or sizes the cache. The size an image is decoded at, in physical pixels: the full size of the file, or a smaller one that the place it is shown at needs.
A twelve-megapixel photograph shown as an 80×80 thumbnail does not need 48 MB of pixels, and on a phone a gallery of them is what gets an application killed for memory. Decoding at the size shown keeps the cost to what is on the screen.
- Neither side given: the file’s own size (
DecodeSize::FULL). - One side: that side, and the other from the image’s own ratio.
- Both: the smallest size, at the image’s own ratio, that covers both. The ratio is never changed, so a picture cropped to a square box keeps its shape, and one letterboxed into it is not short of pixels either.
An image is never decoded larger than the file: asking for more gives the file’s own size.
Fields§
§width: Option<u32>The width wanted, in physical pixels.
height: Option<u32>The height wanted, in physical pixels.
Implementations§
Source§impl DecodeSize
impl DecodeSize
Sourcepub const FULL: DecodeSize
pub const FULL: DecodeSize
The file’s own size.
Sourcepub fn new(width: Option<u32>, height: Option<u32>) -> DecodeSize
pub fn new(width: Option<u32>, height: Option<u32>) -> DecodeSize
A size with either side, both, or neither.
Sourcepub fn target(self, full_width: u32, full_height: u32) -> (u32, u32)
pub fn target(self, full_width: u32, full_height: u32) -> (u32, u32)
The size a full_width × full_height image is decoded at, by the rules above.
use frus_core::DecodeSize;
let photo = (4000, 3000);
// A square thumbnail covered by the photo, at the photo's own ratio.
assert_eq!(DecodeSize::new(Some(200), Some(200)).target(photo.0, photo.1), (267, 200));
// One side: the other follows.
assert_eq!(DecodeSize::new(Some(400), None).target(photo.0, photo.1), (400, 300));
// Never larger than the file.
assert_eq!(DecodeSize::new(Some(8000), None).target(photo.0, photo.1), photo);Trait Implementations§
Source§impl Clone for DecodeSize
impl Clone for DecodeSize
Source§fn clone(&self) -> DecodeSize
fn clone(&self) -> DecodeSize
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for DecodeSize
Source§impl Debug for DecodeSize
impl Debug for DecodeSize
Source§impl Default for DecodeSize
impl Default for DecodeSize
Source§fn default() -> DecodeSize
fn default() -> DecodeSize
impl Eq for DecodeSize
Source§impl Hash for DecodeSize
impl Hash for DecodeSize
Source§impl PartialEq for DecodeSize
impl PartialEq for DecodeSize
impl StructuralPartialEq for DecodeSize
Auto Trait Implementations§
impl Freeze for DecodeSize
impl RefUnwindSafe for DecodeSize
impl Send for DecodeSize
impl Sync for DecodeSize
impl Unpin for DecodeSize
impl UnsafeUnpin for DecodeSize
impl UnwindSafe for DecodeSize
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.