Changeset 378


Ignore:
Timestamp:
Nov 5, 2004, 3:57:50 PM (17 years ago)
Author:
Sam Hocevar
Message:
  • src/bitmap.c: dark background works again with floyd-steinberg.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/bitmap.c

    r376 r378  
    569569    {
    570570        int remain_r = 0, remain_g = 0, remain_b = 0;
    571         int remain_r_next = 0, remain_g_next = 0, remain_b_next = 0;
    572571
    573572        for(x = x1 > 0 ? x1 : 0, _init_dither(y);
     
    579578        int r, g, b, a, fg_r = 0, fg_g = 0, fg_b = 0, bg_r, bg_g, bg_b;
    580579        int fromx, fromy, tox, toy, myx, myy, dots, dist;
     580        int error[3];
    581581
    582582        enum caca_color outfg = 0, outbg = 0;
     
    642642            g += remain_g;
    643643            b += remain_b;
    644             r += remain_r_next;
    645             g += remain_g_next;
    646             b += remain_b_next;
    647             remain_r_next = fs_r[x+1];
    648             remain_g_next = fs_g[x+1];
    649             remain_b_next = fs_b[x+1];
    650644        }
    651645        else
     
    711705            }
    712706            outch = density_chars[4 * ch];
     707
     708            if(_caca_dithering == CACA_DITHERING_FSTEIN)
     709            {
     710                error[0] = r - (fg_r * ch + bg_r * ((2*DCHMAX-1) - ch)) / (2*DCHMAX-1);
     711                error[1] = g - (fg_g * ch + bg_g * ((2*DCHMAX-1) - ch)) / (2*DCHMAX-1);
     712                error[2] = b - (fg_b * ch + bg_b * ((2*DCHMAX-1) - ch)) / (2*DCHMAX-1);
     713            }
    713714        }
    714715        else
    715716        {
    716             int lum = r;
    717             if(g > lum)
    718                 lum = g;
    719             if(b > lum)
    720                 lum = b;
     717            int lum = r; if(g > lum) lum = g; if(b > lum) lum = b;
    721718            outfg = outbg;
    722719            outbg = CACA_COLOR_BLACK;
     
    728725                ch = DCHMAX - 1;
    729726            outch = density_chars[4 * ch];
     727
     728            if(_caca_dithering == CACA_DITHERING_FSTEIN)
     729            {
     730                error[0] = r - bg_r * ch / (DCHMAX-1);
     731                error[1] = g - bg_g * ch / (DCHMAX-1);
     732                error[2] = b - bg_b * ch / (DCHMAX-1);
     733            }
    730734        }
    731735
    732736        if(_caca_dithering == CACA_DITHERING_FSTEIN)
    733737        {
    734             remain_r = r - (fg_r * ch + bg_r * ((2*DCHMAX-1) - ch)) / (2*DCHMAX-1);
    735             remain_g = g - (fg_g * ch + bg_g * ((2*DCHMAX-1) - ch)) / (2*DCHMAX-1);
    736             remain_b = b - (fg_b * ch + bg_b * ((2*DCHMAX-1) - ch)) / (2*DCHMAX-1);
    737             remain_r_next = fs_r[x+1];
    738             remain_g_next = fs_g[x+1];
    739             remain_b_next = fs_b[x+1];
    740             fs_r[x-1] += 3 * remain_r / 16;
    741             fs_g[x-1] += 3 * remain_g / 16;
    742             fs_b[x-1] += 3 * remain_b / 16;
    743             fs_r[x] = 5 * remain_r / 16;
    744             fs_g[x] = 5 * remain_g / 16;
    745             fs_b[x] = 5 * remain_b / 16;
    746             fs_r[x+1] = 1 * remain_r / 16;
    747             fs_g[x+1] = 1 * remain_g / 16;
    748             fs_b[x+1] = 1 * remain_b / 16;
    749             remain_r = 7 * remain_r / 16;
    750             remain_g = 7 * remain_g / 16;
    751             remain_b = 7 * remain_b / 16;
     738            remain_r = fs_r[x+1] + 7 * error[0] / 16;
     739            remain_g = fs_g[x+1] + 7 * error[1] / 16;
     740            remain_b = fs_b[x+1] + 7 * error[2] / 16;
     741            fs_r[x-1] += 3 * error[0] / 16;
     742            fs_g[x-1] += 3 * error[1] / 16;
     743            fs_b[x-1] += 3 * error[2] / 16;
     744            fs_r[x] = 5 * error[0] / 16;
     745            fs_g[x] = 5 * error[1] / 16;
     746            fs_b[x] = 5 * error[2] / 16;
     747            fs_r[x+1] = 1 * error[0] / 16;
     748            fs_g[x+1] = 1 * error[1] / 16;
     749            fs_b[x+1] = 1 * error[2] / 16;
    752750        }
    753751
Note: See TracChangeset for help on using the changeset viewer.