Home | History | Annotate | Download | only in docs
      1 #Topic Illustrations
      2 
      3 #Subtopic Image_Info_Color_Type_BGR_565
      4 #Example
      5 #Width 415
      6 #Height 250
      7 void draw(SkCanvas* canvas) {
      8     canvas->scale(1.25f, 1.25f);
      9     SkPaint paint;
     10     paint.setAntiAlias(true);
     11     paint.setTextSize(10);
     12     paint.setTextAlign(SkPaint::kCenter_Align);
     13     canvas->drawString("16-bit word", 5 + 20 * 8, 20, paint);
     14     canvas->drawString("little endian byte order", 5 + 20 * 4, 85, paint);
     15     canvas->drawString("(low bits)", 5 + 20 * 1.5f, 137, paint);
     16     canvas->drawString("(high bits)", 5 + 20 * 6.5f, 187, paint);
     17     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
     18         SkPaint p(paint);
     19         p.setColor(SK_ColorRED);
     20         SkScalar xPos = 15;
     21         int width = n % 32 + 1;
     22         int lastN = n > 32 ? 32 : 0;
     23         for (; n >= lastN; --n) {
     24             for (int i = 0; i <= count; ++i) {
     25                 int a = width - e[i];
     26                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
     27                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
     28                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
     29                     break;
     30                 }
     31             }
     32             xPos += 20;
     33         }
     34         p.setColor(SK_ColorBLACK);
     35         for (int i = 0; i < count; ++i) {
     36             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
     37         }
     38         p.setStyle(SkPaint::kStroke_Style);
     39         for (int i = 0; i <= count; ++i) {
     40             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
     41         }
     42         for (int i = 0; i < 2; ++i) {
     43             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
     44         }
     45     };
     46     SkScalar edges[] = { 0, 5, 11, 16, 
     47                          0, 3, 8,
     48                          0, 5, 8 };
     49     const char* labels[] = { "red", "green", "blue" };
     50     drawBoxText(&edges[0], &labels[0], 3, 15, 45);
     51     drawBoxText(&edges[4], &labels[1], 2, 7, 110);
     52     drawBoxText(&edges[7], &labels[0], 2, 7, 160);
     53 }
     54 ##
     55 ##
     56 
     57 #Subtopic Image_Info_Color_Type_ABGR_4444
     58 #Example
     59 #Width 415
     60 #Height 250
     61 void draw(SkCanvas* canvas) {
     62     canvas->scale(1.25f, 1.25f);
     63     SkPaint paint;
     64     paint.setAntiAlias(true);
     65     paint.setTextSize(10);
     66     paint.setTextAlign(SkPaint::kCenter_Align);
     67     canvas->drawString("16-bit word", 5 + 20 * 8, 20, paint);
     68     canvas->drawString("little endian byte order", 5 + 20 * 4, 85, paint);
     69     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
     70         SkPaint p(paint);
     71         p.setColor(SK_ColorRED);
     72         SkScalar xPos = 15;
     73         int width = n % 32 + 1;
     74         int lastN = n > 32 ? 32 : 0;
     75         for (; n >= lastN; --n) {
     76             for (int i = 0; i <= count; ++i) {
     77                 int a = width - e[i];
     78                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
     79                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
     80                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
     81                     break;
     82                 }
     83             }
     84             xPos += 20;
     85         }
     86         p.setColor(SK_ColorBLACK);
     87         for (int i = 0; i < count; ++i) {
     88             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
     89         }
     90         p.setStyle(SkPaint::kStroke_Style);
     91         for (int i = 0; i <= count; ++i) {
     92             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
     93         }
     94         for (int i = 0; i < 2; ++i) {
     95             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
     96         }
     97     };
     98     SkScalar edges[] = { 0, 4, 8, 12, 16 };
     99     const char* labels[] = { "red", "green", "blue", "alpha" };
    100     drawBoxText(&edges[0], &labels[0], 4, 15, 45);
    101     drawBoxText(&edges[0], &labels[2], 2, 7, 110);
    102     drawBoxText(&edges[0], &labels[0], 2, 7, 160);
    103 }
    104 ##
    105 ##
    106 
    107 #Subtopic Image_Info_Color_Type_RGBA_8888
    108 #Example
    109 #Width 812
    110 #Height 365
    111 void draw(SkCanvas* canvas) {
    112     canvas->scale(1.25f, 1.25f);
    113     SkPaint paint;
    114     paint.setAntiAlias(true);
    115     paint.setTextSize(10);
    116     paint.setTextAlign(SkPaint::kCenter_Align);
    117     canvas->drawString("32-bit word", 5 + 20 * 16, 20, paint);
    118     canvas->drawString("little endian byte order", 5 + 20 * 4, 85, paint);
    119     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
    120         SkPaint p(paint);
    121         p.setColor(SK_ColorRED);
    122         SkScalar xPos = 15;
    123         int width = n % 32 + 1;
    124         int lastN = n > 32 ? 32 : 0;
    125         for (; n >= lastN; --n) {
    126             for (int i = 0; i <= count; ++i) {
    127                 int a = width - e[i];
    128                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
    129                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
    130                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
    131                     break;
    132                 }
    133             }
    134             xPos += 20;
    135         }
    136         p.setColor(SK_ColorBLACK);
    137         for (int i = 0; i < count; ++i) {
    138             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
    139         }
    140         p.setStyle(SkPaint::kStroke_Style);
    141         for (int i = 0; i <= count; ++i) {
    142             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
    143         }
    144         for (int i = 0; i < 2; ++i) {
    145             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
    146         }
    147     };
    148     SkScalar edges[] = { 0, 8, 16, 24, 32 };
    149     const char* labels[] = { "alpha", "blue", "green", "red" };
    150     drawBoxText(edges, &labels[0], 4, 31, 45);
    151     drawBoxText(edges, &labels[3], 1, 7, 110);
    152     drawBoxText(edges, &labels[2], 1, 7, 160);
    153     drawBoxText(edges, &labels[1], 1, 7, 210);
    154     drawBoxText(edges, &labels[0], 1, 7, 260);
    155 }
    156 ##
    157 ##
    158 
    159 #Subtopic Image_Info_Color_Type_RGB_888x
    160 #Example
    161 #Width 812
    162 #Height 365
    163 void draw(SkCanvas* canvas) {
    164     canvas->scale(1.25f, 1.25f);
    165     SkPaint paint;
    166     paint.setAntiAlias(true);
    167     paint.setTextSize(10);
    168     paint.setTextAlign(SkPaint::kCenter_Align);
    169     canvas->drawString("32-bit word", 5 + 20 * 16, 20, paint);
    170     canvas->drawString("little endian byte order", 5 + 20 * 4, 85, paint);
    171     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
    172         SkPaint p(paint);
    173         p.setColor(SK_ColorRED);
    174         SkScalar xPos = 15;
    175         int width = n % 32 + 1;
    176         int lastN = n > 32 ? 32 : 0;
    177         for (; n >= lastN; --n) {
    178             for (int i = 0; i <= count; ++i) {
    179                 int a = width - e[i];
    180                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
    181                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
    182                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
    183                     break;
    184                 }
    185             }
    186             xPos += 20;
    187         }
    188         p.setColor(SK_ColorBLACK);
    189         for (int i = 0; i < count; ++i) {
    190             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
    191         }
    192         p.setStyle(SkPaint::kStroke_Style);
    193         for (int i = 0; i <= count; ++i) {
    194             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
    195         }
    196         for (int i = 0; i < 2; ++i) {
    197             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
    198         }
    199     };
    200     SkScalar edges[] = { 0, 8, 16, 24, 32 };
    201     const char* labels[] = { "(unused)", "blue", "green", "red" };
    202     drawBoxText(edges, &labels[0], 4, 31, 45);
    203     drawBoxText(edges, &labels[3], 1, 7, 110);
    204     drawBoxText(edges, &labels[2], 1, 7, 160);
    205     drawBoxText(edges, &labels[1], 1, 7, 210);
    206     drawBoxText(edges, &labels[0], 1, 7, 260);
    207 }
    208 ##
    209 ##
    210 
    211 #Subtopic Image_Info_Color_Type_BGRA_8888
    212 #Example
    213 #Width 812
    214 #Height 365
    215 void draw(SkCanvas* canvas) {
    216     canvas->scale(1.25f, 1.25f);
    217     SkPaint paint;
    218     paint.setAntiAlias(true);
    219     paint.setTextSize(10);
    220     paint.setTextAlign(SkPaint::kCenter_Align);
    221     canvas->drawString("32-bit word", 5 + 20 * 16, 20, paint);
    222     canvas->drawString("little endian byte order", 5 + 20 * 4, 85, paint);
    223     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
    224         SkPaint p(paint);
    225         p.setColor(SK_ColorRED);
    226         SkScalar xPos = 15;
    227         int width = n % 32 + 1;
    228         int lastN = n > 32 ? 32 : 0;
    229         for (; n >= lastN; --n) {
    230             for (int i = 0; i <= count; ++i) {
    231                 int a = width - e[i];
    232                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
    233                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
    234                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
    235                     break;
    236                 }
    237             }
    238             xPos += 20;
    239         }
    240         p.setColor(SK_ColorBLACK);
    241         for (int i = 0; i < count; ++i) {
    242             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
    243         }
    244         p.setStyle(SkPaint::kStroke_Style);
    245         for (int i = 0; i <= count; ++i) {
    246             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
    247         }
    248         for (int i = 0; i < 2; ++i) {
    249             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
    250         }
    251     };
    252     SkScalar edges[] = { 0, 8, 16, 24, 32 };
    253     const char* labels[] = { "alpha", "red", "green", "blue" };
    254     drawBoxText(edges, &labels[0], 4, 31, 45);
    255     drawBoxText(edges, &labels[3], 1, 7, 110);
    256     drawBoxText(edges, &labels[2], 1, 7, 160);
    257     drawBoxText(edges, &labels[1], 1, 7, 210);
    258     drawBoxText(edges, &labels[0], 1, 7, 260);
    259 }
    260 ##
    261 ##
    262 
    263 #Subtopic Image_Info_Color_Type_RGBA_1010102
    264 #Example
    265 #Width 812
    266 #Height 380
    267 void draw(SkCanvas* canvas) {
    268     canvas->scale(1.25f, 1.25f);
    269     SkPaint paint;
    270     paint.setAntiAlias(true);
    271     paint.setTextSize(10);
    272     paint.setTextAlign(SkPaint::kCenter_Align);
    273     canvas->drawString("32-bit word", 5 + 20 * 16, 20, paint);
    274     canvas->drawString("little endian byte order", 5 + 20 * 4, 85, paint);
    275     canvas->drawString("(low bits)", 5 + 20 * 4, 137, paint);
    276     canvas->drawString("(low bits)", 5 + 20 * 3, 187, paint);
    277     canvas->drawString("(high bits)", 5 + 20 * 7, 187, paint);
    278     canvas->drawString("(low bits)", 5 + 20 * 2, 237, paint);
    279     canvas->drawString("(high bits)", 5 + 20 * 6, 237, paint);
    280     canvas->drawString("(high bits)", 5 + 20 * 5, 287, paint);
    281     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
    282         SkPaint p(paint);
    283         p.setColor(SK_ColorRED);
    284         SkScalar xPos = 15;
    285         int width = n % 32 + 1;
    286         int lastN = n > 32 ? 32 : 0;
    287         for (; n >= lastN; --n) {
    288             for (int i = 0; i <= count; ++i) {
    289                 int a = width - e[i];
    290                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
    291                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
    292                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
    293                     break;
    294                 }
    295             }
    296             xPos += 20;
    297         }
    298         p.setColor(SK_ColorBLACK);
    299         for (int i = 0; i < count; ++i) {
    300             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
    301         }
    302         p.setStyle(SkPaint::kStroke_Style);
    303         for (int i = 0; i <= count; ++i) {
    304             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
    305         }
    306         for (int i = 0; i < 2; ++i) {
    307             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
    308         }
    309     };
    310     SkScalar edges[] = { 0, 2, 12, 22, 32,
    311                          0, 8,
    312                          0, 6, 8,
    313                          0, 4, 8,
    314                          0, 2, 8
    315                         };
    316     const char* labels[] = { "alpha", "blue", "green", "red" };
    317     drawBoxText(&edges[0], &labels[0], 4, 31, 45);
    318     drawBoxText(&edges[5], &labels[3], 1, 7, 110);
    319     drawBoxText(&edges[7], &labels[2], 2, 7, 160);
    320     drawBoxText(&edges[10], &labels[1], 2, 7, 210);
    321     drawBoxText(&edges[13], &labels[0], 2, 7, 260);
    322 }
    323 ##
    324 ##
    325 
    326 #Subtopic Image_Info_Color_Type_RGB_101010x
    327 #Example
    328 #Width 812
    329 #Height 380
    330 void draw(SkCanvas* canvas) {
    331     canvas->scale(1.25f, 1.25f);
    332     SkPaint paint;
    333     paint.setAntiAlias(true);
    334     paint.setTextSize(10);
    335     paint.setTextAlign(SkPaint::kCenter_Align);
    336     canvas->drawString("32-bit word", 5 + 20 * 16, 20, paint);
    337     canvas->drawString("little endian byte order", 5 + 20 * 4, 85, paint);
    338     canvas->drawString("(low bits)", 5 + 20 * 4, 137, paint);
    339     canvas->drawString("(low bits)", 5 + 20 * 3, 187, paint);
    340     canvas->drawString("(high bits)", 5 + 20 * 7, 187, paint);
    341     canvas->drawString("(low bits)", 5 + 20 * 2, 237, paint);
    342     canvas->drawString("(high bits)", 5 + 20 * 6, 237, paint);
    343     canvas->drawString("(high bits)", 5 + 20 * 5, 287, paint);
    344     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
    345         SkPaint p(paint);
    346         p.setColor(SK_ColorRED);
    347         SkScalar xPos = 15;
    348         int width = n % 32 + 1;
    349         int lastN = n > 32 ? 32 : 0;
    350         for (; n >= lastN; --n) {
    351             for (int i = 0; i <= count; ++i) {
    352                 int a = width - e[i];
    353                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
    354                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
    355                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
    356                     break;
    357                 }
    358             }
    359             xPos += 20;
    360         }
    361         p.setColor(SK_ColorBLACK);
    362         for (int i = 0; i < count; ++i) {
    363             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
    364         }
    365         p.setStyle(SkPaint::kStroke_Style);
    366         for (int i = 0; i <= count; ++i) {
    367             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
    368         }
    369         for (int i = 0; i < 2; ++i) {
    370             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
    371         }
    372     };
    373     SkScalar edges[] = { 0, 2, 12, 22, 32,
    374                          0, 8,
    375                          0, 6, 8,
    376                          0, 4, 8,
    377                          0, 2, 8
    378                         };
    379     const char* labels[] = { "unused", "blue", "green", "red" };
    380     drawBoxText(&edges[0], &labels[0], 4, 31, 45);
    381     drawBoxText(&edges[5], &labels[3], 1, 7, 110);
    382     drawBoxText(&edges[7], &labels[2], 2, 7, 160);
    383     drawBoxText(&edges[10], &labels[1], 2, 7, 210);
    384     drawBoxText(&edges[13], &labels[0], 2, 7, 260);
    385 }
    386 ##
    387 ##
    388 
    389 #Subtopic Image_Info_Color_Type_RGBA_F16
    390 #Example
    391 #Width 812
    392 #Height 685
    393 void draw(SkCanvas* canvas) {
    394     canvas->scale(1.25f, 1.25f);
    395     SkPaint paint;
    396     paint.setAntiAlias(true);
    397     paint.setTextSize(10);
    398     paint.setTextAlign(SkPaint::kCenter_Align);
    399     canvas->drawString("64-bit word", 5 + 20 * 16, 20, paint);
    400     canvas->drawString("little endian byte order", 5 + 20 * 4, 135, paint);
    401     for (int i = 0; i < 4; ++i) {
    402         canvas->drawString("(low bits)", 5 + 20 * 4, 187 + i * 100, paint);
    403         canvas->drawString("(high bits)", 5 + 20 * 4, 237 + i * 100, paint);
    404     }
    405     auto drawBoxText = [=](SkScalar e[], const char* s[], int count, int n, SkScalar yPos) -> void {
    406         SkPaint p(paint);
    407         p.setColor(SK_ColorRED);
    408         SkScalar xPos = 15;
    409         int width = n % 32 + 1;
    410         int lastN = n > 32 ? 32 : 0;
    411         for (; n >= lastN; --n) {
    412             for (int i = 0; i <= count; ++i) {
    413                 int a = width - e[i];
    414                 if (a == n || a == n + 1 || a == n - 32 || a == n - 31) {
    415                     char num[3] = {(char) ('0' + n / 10), (char) ('0' + n % 10), '\0'};
    416                     canvas->drawString(n >= 10 ? num : &num[1], xPos, yPos - 5, p);
    417                     break;
    418                 }
    419             }
    420             xPos += 20;
    421         }
    422         p.setColor(SK_ColorBLACK);
    423         for (int i = 0; i < count; ++i) {
    424             canvas->drawString(s[i], 5 + (e[i] + e[i + 1]) * 10, yPos + 10, p);
    425         }
    426         p.setStyle(SkPaint::kStroke_Style);
    427         for (int i = 0; i <= count; ++i) {
    428             canvas->drawLine(5 + e[i] * 20, yPos, 5 + e[i] * 20, yPos + 15, p);
    429         }
    430         for (int i = 0; i < 2; ++i) {
    431             canvas->drawLine(5 + e[0] * 20, yPos + i * 15, 5 + e[count] * 20, yPos + i * 15, p);
    432         }
    433     };
    434     SkScalar edges[] = { 0, 16, 32,
    435                          0, 8
    436                        };
    437     const char* labels[] = { "alpha", "blue", "green", "red" };
    438     drawBoxText(&edges[0], &labels[0], 2, 63, 45);
    439     drawBoxText(&edges[0], &labels[2], 2, 31, 95);
    440     drawBoxText(&edges[3], &labels[3], 1, 7, 160);
    441     drawBoxText(&edges[3], &labels[3], 1, 7, 210);
    442     drawBoxText(&edges[3], &labels[2], 1, 7, 260);
    443     drawBoxText(&edges[3], &labels[2], 1, 7, 310);
    444     drawBoxText(&edges[3], &labels[1], 1, 7, 360);
    445     drawBoxText(&edges[3], &labels[1], 1, 7, 410);
    446     drawBoxText(&edges[3], &labels[0], 1, 7, 460);
    447     drawBoxText(&edges[3], &labels[0], 1, 7, 510);
    448 }
    449 ##
    450 ##
    451 
    452 #Topic Illustrations ##
    453