34 #include "dcmtk/config/osconfig.h"
35 #include "dcmtk/dcmimage/diqtpix.h"
36 #include "dcmtk/ofstd/ofcond.h"
42 #define DcmQuantFloydSteinbergScale 1024
73 register long sr = px.
getRed() +
thisrerr[col + 1] / DcmQuantFloydSteinbergScale;
74 register long sg = px.
getGreen() +
thisgerr[col + 1] / DcmQuantFloydSteinbergScale;
75 register long sb = px.
getBlue() +
thisberr[col + 1] / DcmQuantFloydSteinbergScale;
77 else if ( sr > OFstatic_cast(
long, maxval) ) sr = maxval;
79 else if ( sg > OFstatic_cast(
long, maxval) ) sg = maxval;
81 else if ( sb > OFstatic_cast(
long, maxval) ) sb = maxval;
82 px.
assign(OFstatic_cast(DcmQuantComponent, sr), OFstatic_cast(DcmQuantComponent, sg), OFstatic_cast(DcmQuantComponent, sb));
97 err = ( OFstatic_cast(
long, px.
getRed()) - OFstatic_cast(
long, mapped.
getRed()) ) * DcmQuantFloydSteinbergScale;
98 thisrerr[col + 2] += ( err * 7 ) / 16;
100 nextrerr[col + 1] += ( err * 5 ) / 16;
102 err = ( OFstatic_cast(
long, px.
getGreen()) - OFstatic_cast(
long, mapped.
getGreen()) ) * DcmQuantFloydSteinbergScale;
103 thisgerr[col + 2] += ( err * 7 ) / 16;
105 nextgerr[col + 1] += ( err * 5 ) / 16;
107 err = ( OFstatic_cast(
long, px.
getBlue()) - OFstatic_cast(
long, mapped.
getBlue()) ) * DcmQuantFloydSteinbergScale;
108 thisberr[col + 2] += ( err * 7 ) / 16;
110 nextberr[col + 1] += ( err * 5 ) / 16;
115 err = ( OFstatic_cast(
long, px.
getRed()) - OFstatic_cast(
long, mapped.
getRed()) ) * DcmQuantFloydSteinbergScale;
117 nextrerr[col + 2] += ( err * 3 ) / 16;
118 nextrerr[col + 1] += ( err * 5 ) / 16;
120 err = ( OFstatic_cast(
long, px.
getGreen()) - OFstatic_cast(
long, mapped.
getGreen()) ) * DcmQuantFloydSteinbergScale;
122 nextgerr[col + 2] += ( err * 3 ) / 16;
123 nextgerr[col + 1] += ( err * 5 ) / 16;
125 err = ( OFstatic_cast(
long, px.
getBlue()) - OFstatic_cast(
long, mapped.
getBlue()) ) * DcmQuantFloydSteinbergScale;
127 nextberr[col + 2] += ( err * 3 ) / 16;
128 nextberr[col + 1] += ( err * 5 ) / 16;
142 for (
unsigned long c = 0; c <
columns + 2; ++c)