// static SkPDFArray* SkPDFUtils::MatrixToArray(const SkMatrix& matrix) { SkScalar values[6]; SkAssertResult(matrix.pdfTransform(values)); SkPDFArray* result = new SkPDFArray; result->reserve(6); for (size_t i = 0; i < SK_ARRAY_COUNT(values); i++) { result->append(new SkPDFScalar(values[i]))->unref(); } return result; }
static SkPDFArray* make_indexed_color_space(SkColorTable* table) { SkPDFArray* result = new SkPDFArray(); result->reserve(4); result->appendName("Indexed"); result->appendName("DeviceRGB"); result->appendInt(table->count() - 1); // Potentially, this could be represented in fewer bytes with a stream. // Max size as a string is 1.5k. SkString index; for (int i = 0; i < table->count(); i++) { char buf[3]; SkColor color = SkUnPreMultiply::PMColorToColor((*table)[i]); buf[0] = SkGetPackedR32(color); buf[1] = SkGetPackedG32(color); buf[2] = SkGetPackedB32(color); index.append(buf, 3); } result->append(new SkPDFString(index))->unref(); return result; }