anchor.diff:      for (int yi = y; yi < y2; ++yi) {
         for (int xi = x; xi < x2; ++xi) {
           int p = ch.image[pi++];
  -        p = getColor((getRed(p) * dr).toInt(),
  -                     (getGreen(p) * dg).toInt(),
  -                     (getBlue(p) * db).toInt(),
  -                     (getAlpha(p) * da).toInt());
  -
  +        if (color != 0xffffffff) {
  +          p = getColor(_r_lut[getRed(p)],
  +              _g_lut[getGreen(p)],
  +              _b_lut[getBlue(p)],
  +              _a_lut[getAlpha(p)]);
  +        }
           drawPixel(image, xi + ch.xoffset, yi + ch.yoffset, p);
         }
       }
  
positive.code: import '../bitmap_font.dart';
  import '../color.dart';
  import '../image.dart';
  import 'draw_pixel.dart';
  
  /**
   * Draw a string horizontally into [image] horizontally into [image] at position
  
negative.code:  * such as: [arial_14], [arial_24], or [arial_48].
   */
  Image drawString(Image image, BitmapFont font, int x, int y, String string,
                   {int color = 0xffffffff}) {
    if (color != 0xffffffff) {
      int ca = getAlpha(color);
      if (ca == 0) {
        return image;
      }
      double da = ca / 255.0;
      double dr = getRed(color) / 255.0;
      double dg = getGreen(color) / 255.0;
      double db = getBlue(color) / 255.0;
      for (int i = 1; i < 256; ++i) {
        _r_lut[i] = (dr * i).toInt();
        _g_lut[i] = (dg * i).toInt();
        _b_lut[i] = (db * i).toInt();
        _a_lut[i] = (da * i).toInt();
      }
    }
  
    List<int> chars = string.codeUnits;
    for (int c in chars) {
  