| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <!DOCTYPE html> <HTML lang=en> <HEAD> <STYLE>
- body { background-color: #EEFFEE; font-size: 1.0rem; font-family: Arial; max-width: 60rem;
- color: #000000; margin: 0px;
- padding-left: 0px; padding-right: 0px; padding-top: 0px; padding-bottom: 0px; }
- H1 { padding-left: 10px; padding-right: 0px; padding-top: 10px; padding-bottom: 10px; font-size: 1.4rem; }
- H2 { padding-left: 10px; padding-right: 0px; padding-top: 10px; padding-bottom: 0px; font-size: 1.2rem; }
- blockquote {
- tab-size: 3rem;
- color: #88FF88; background: #000000;
- font-size: 0.95rem; font-family: monospace;
- padding-left: 5px; padding-right: 5px;
- padding-top: 5px; padding-bottom: 5px;
- }
- P { padding-left: 20px; padding-right: 0px; padding-top: 0px; padding-bottom: 0px; }
- IMG { padding-left: 0px; padding-right: 0px; padding-top: 2px; padding-bottom: 0px;
- max-width: 100%; }
- A { display: inline; border-radius: 4px;
- font-size: 1.0rem; font-family: Arial; color: #000044; text-decoration: none;
- padding-left: 4px; padding-right: 4px; padding-top: 4px; padding-bottom: 4px; }
- A:hover { color: #FFFF00; background: #000044; }
- A:active { color: #FFFFFF; background: #444444; }
- </STYLE> </HEAD> <BODY>
- <IMG SRC="Images/Title.png" ALT="Images/Title.png">
- <P>
- <A href="Manual.html">Back to main page</A>
- </P><P>
- </P><H1> Images</H1><P>All images are passed using reference counted handles so that they are automatically cleaned up when the last handle is freed.
- Only having one way to pass images hidden behind a referebce counted handle type removes the burden of remembering
- if you passed it as a value, reference, pointer, shared pointer or unique pointer.
- There's just one way to pass images, using the safe handles.
- By using global methods for all image operations, accidentally calling a method on a null objects
- can be caught safely instead of triggering undefined behaviour with random crashes.
- Always passing by reference for convenience however costs a little bit more to allocate, so don't create and destroy sub-images all the time.
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> ImageU8</H2><P>The most basic image format used for 8-bit gray-scale images using 0 for black and 255 for white.
- Can be displayed by drawing it using draw_copy onto a color image for automatic conversion.
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> ImageU16</H2><P>If 8-bit precision is not enough but you still want the determinism of using integers, there's also a 16-bit monochrome image.
- Just like 8-bit images, the visible range is 0 to 255 when converting automatically, but the 16-bit image has a higher range up to 65535 (2¹⁶ - 1).
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> ImageF32</H2><P>32-bit floating-point images offer more flexibility for advanced image filtering, but does not have the same determinism as integer formats.
- Avoid exact equality comparisons using floating-point numbers, because it's always an approximation and the rounding method may differ between CPU models.
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> ImageRgbaU8</H2><P>A 32-bit color image format using 4 channels with 8 bits in each. The alpha channel can be used to represent opacity or any other information needed.
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> Aligned images</H2><P>Then there's the aligned image types AlignedImageU8, AlignedImageU16, AlignedImageF32 and AlignedImageRgbaU8.
- Aligned images are created from the constructors by default because new images are always aligned for SIMD vectorization.
- Aligned integer images (AlignedImageU8, AlignedImageU16 and AlignedImageRgbaU8) use DSR_DEFAULT_ALIGNMENT to be compatible with the largest supported SIMD vector capable of processing all element types, called the X vector (F32xX, I32xX, U32xX, U16xX, U8xX).
- Aligned float images (AlignedImageF32) use DSR_FLOAT_ALIGNMENT to be compatible with the largest supported floating-point SIMD vector, called the F vector (F32xF).
- The F vector size is as least as large as the X vector size, so floating-point images aligned for the F vector are also aligned for the X vectors.
- Non-aligned images are created as sub-images pointing to existing pixel buffers without cloning.
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> Ordered images</H2><P>The ordered image type OrderedImageRgbaU8 is aligned just like AlignedImageU8 but also ensures that
- the pack order is RGBA on every platform, which makes it easy to manuipulate using pointers.
- AlignedImageRgbaU8 can however be dynamically set to different internal pack orders using the
- constructor image_create_RgbaU8_native, which is used by the window's canvas.
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> Loading images</H2><P>image_load_RgbaU8 can be used to load an RGBA image from a file.
- If you only need one channel, then use image_get_red on the result to extract the first channel from a gray-scale image.
- </P><IMG SRC="Images/Border.png"><P>
- </P><H2> Saving images</H2><P>image_save can be used to save an RGBA image to a file.
- </P><IMG SRC="Images/Border.png"><P>
- </P>
- </BODY> </HTML>
|