home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.arch      Apparently more than just beeps & boops      131,241 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 130,096 of 131,241   
   Robert Finch to BGB   
   Re: Tonights Tradeoff (1/2)   
   02 Nov 25 10:06:42   
   
   From: robfi680@gmail.com   
      
   On 2025-11-02 3:21 a.m., BGB wrote:   
   > On 10/31/2025 2:32 PM, BGB wrote:   
   >> On 10/31/2025 1:21 PM, BGB wrote:   
   >>   
   >> ...   
   >>   
   >>>   
   >>> In a lot of the cases, I was using an 8-bit indexed color or color-   
   >>> cell mode. For indexed color, one needs to send each image through a   
   >>> palette conversion (to the OS color palette); or run a color-cell   
   >>> encoder. Mostly because the display HW used 128K of VRAM.   
   >>>   
   >>> And, even if RAM backed, there are bandwidth problems with going   
   >>> bigger; so higher-resolutions had typically worked to reduce the bits   
   >>> per pixel:   
   >>>     320x200: 16 bpp   
   >>>     640x400: 4 bpp (color cell), 8 bpp (uses 256K, sorta works)   
   >>>     800x600: 2 or 4 bpp color-cell   
   >>>    1024x768: 1 bpp monochrome, other experiments (*1)   
   >>>      Or, use the 2 bpp mode, for 192K.   
   >>>   
   >>> *1: Bayer Pattern Mode/Logic (where the pattern of pixels also   
   >>> encodes the color);   
   >>> One possibility also being to use an indexed color pair for every   
   >>> 8x8, allowing for a 1.25 bpp color cell mode.   
   >>>   
   >>   
   >>   
   >> Expanding on this:   
   >> Idea 1, original:   
   >> Each group of 2x2 pixels understood as:   
   >>    G R   
   >>    B G   
   >> With each pixel alternating color.   
   >>   
   >> But, slightly better for quality is to operate on blocks of 4x4   
   >> pixels, with the pixel bits encoding color indirectly for the whole   
   >> 4x4 block:   
   >>    G R G B   
   >>    B G R G   
   >>    G R G B   
   >>    B G R G   
   >> So, if >= 4 G bits are set, G is High.   
   >> So, if >= 2 R bits are set, R is High.   
   >> So, if >= 2 B bits are set, B is High.   
   >> If > 8 bits are set, I is high.   
   >>   
   >> The non-set pixels usually assuming either 0000 (Black) or 1000 (Dark   
   >> Grey) depending on I bit. Or, a low intensity version of the main   
   >> color if over 75% of a given bit are set in a given way (say, for   
   >> mostly flat color blocks).   
   >>   
   >> Still kinda sucks, but allows a crude approximation of 16 color   
   >> graphics at 1 bpp...   
   >>   
   >   
   > Well, anyways, here is me testing with another variation of the idea   
   > (after thinking about it again).   
   >   
   > Using a joke image as a test case here...   
   >   
   > https://x.com/cr88192/status/1984694932666261839   
   >   
   > This variation uses:   
   >    Y R   
   >    B G   
   >   
   > In this case tiling as:   
   >    Y R Y R ...   
   >    B G B G ...   
   >    Y R Y R ...   
   >    B G B G ...   
   >    ...   
   >   
   > Where, Y is a pure luma value.   
   >    May or may not use this, or:   
   >      Y R B G Y R B G   
   >      B G Y R B G Y R   
   >      ...   
   >    But, prior pattern is simpler to deal with.   
   >   
   > Note that having every line follow the same pattern (with no   
   > alternation) would lead to obvious vertical lines in the output.   
   >   
   >   
   > With a different (slightly more complicated color recovery algorithm),   
   > and was operating on 8x8 pixel blocks.   
   >   
   > With 4x4, there is effectively 4 bits per channel, which is enough to   
   > recover 1 bit of color per channel.   
   >   
   > With 8x8, there are 16 bits, and it is possible to recover ~ 3 bits per   
   > channel, allowing for roughly a RGB333 color space (though, the vectors   
   > are normalized here).   
   >   
   > Having both a Y and G channel slightly helps with the color-recovery   
   > process; and allows a way to signal a monochrome block (if Y==G, the   
   > block is assumed to be monochrome, and the R/B bits can be used more   
   > freely for expressing luma).   
   >   
   > Where:   
   > Chroma accuracy comes at the expense of luma accuracy;   
   > An increased colorspace comes at the cost of spatial resolution of chroma;   
   > ...   
   >   
   >   
   > Dealing with chroma does have the effect of making the dithering process   
   > more complicated. As noted, reliable recovery of the color vector is   
   > itself a bit fiddly (and is very sensitive to the encoder side dither   
   > process).   
   >   
   > The former image was itself an example of an artifact caused by the   
   > dithering process, which in this case was over-boosting the green   
   > channel (and rotating the dither matrix would result in drastic color   
   > shifts). The later image was mostly after I realized the issue with the   
   > dither pattern, and modified how it was being handled (replacing the use   
   > of an 8x8 ordered dither with a 4x4 ordered dither, and then rotating   
   > the matrix for each channel).   
   >   
   >   
   > Image quality isn't great, but then again, not sure how to do that much   
   > better with a naive 1 bit/pixel encoding.   
   >   
   >   
   > I guess, an open question here is whether the color-recovery algorithm   
   > would be practical for hardware / FPGA.   
   >   
   > One possible could be:   
   >    Use LUT4 to map 4b -> 2b (as a count)   
   >    Then, map 2x2b -> 3b (adder)   
   >    Then, map 2x3b -> 4b (adder), then discard LSB.   
   >    Then, select max or R/G/B/Y;   
   >      This is used as an inverse normalization scale.   
   >    Feed each value and scale through a LUT (for R/G/B)   
   >      Getting a 5-bit scaled RGB;   
   >      Roughly: (Val<<5)/Max   
   >    Compose a 5-bit RGB555 value used for each pixel that is set.   
   >   
   > Actual pixel decoding process works the same as with 8x8 blocks of 1 bit   
   > monochome, selecting minimum or maximum color based on each bit.   
   >   
   > Possibly, Y could also be used to select "relative" minimum and maximum   
   > values, vs full intensity and black, but this would add more logic   
   > complexity.   
   >   
   >   
   > Pros/Cons:   
   >    +: Looks better than per-pixel Bayer-RGB   
   >    +: Looks better than 4x4 RGBI   
   >    -: Would require more complex decoder logic;   
   >    -: Requires specialized dither logic to not look like broken crap.   
   >    -: Doesn't give passable results if handed naive grayscale dithering.   
   >   
   > Per-Pixel RGB still holds up OK with naive grayscale dither.   
   > But, this approach is a lot more particular.   
   >   
   > the RGBI approach seems intermediate, more likely to decode grayscale   
   > patterns as gray.   
   >   
   >   
   >   
   > I guess a more open question is if such a thing could be useful (it is   
   > pretty far down the image-quality scale). But, OTOH, with simpler (non-   
   > randomized) dither patterns; it can LZ compress OK (depending on image,   
   > can get 0.1 to 0.8 bpp; which is generally JPEG territory).   
   >   
   > If combined with delta encoding or similar; could almost be adapted into   
   > a very crappy video codec.   
   >   
   > Well, or LZ4, where (at 320x200) one could potentially hold several   
   > frames of video in a 64K sliding window.   
   >   
   > But, image quality might be unacceptably poor. Also if decoded in   
   > software, the color-reconstruction is likely to be more computationally   
   > expensive than just using a CRAM style codec (while also giving worse   
   > image quality).   
   >   
   >   
   > More just interesting that I was able to get things "almost half-way   
   > passable" from 1 bpp monochrome.   
   >   
   >   
   > ...   
   >   
   >   
   >   
   I think your support for graphics is interesting; something to keep in   
   mind for displays with limited RAM.   
      
      
   [continued in next message]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca