Index: src/core/SkLinearBitmapPipeline_sample.h |
diff --git a/src/core/SkLinearBitmapPipeline_sample.h b/src/core/SkLinearBitmapPipeline_sample.h |
index e957ae7e4d0268cc285b193d0ceb2d31f9184d47..86ad6e146f0062ed779d493538f8f366ece46a00 100644 |
--- a/src/core/SkLinearBitmapPipeline_sample.h |
+++ b/src/core/SkLinearBitmapPipeline_sample.h |
@@ -77,16 +77,20 @@ private: |
}; |
template <SkGammaType gammaType> |
+static inline Sk4f pmcolor_to_rgba(SkPMColor pixel) { |
+ return swizzle_rb_if_bgra( |
+ (gammaType == kSRGB_SkGammaType) ? Sk4f_fromS32(pixel) |
+ : Sk4f_fromL32(pixel)); |
+} |
+ |
+template <SkGammaType gammaType> |
class PixelConverter<kRGB_565_SkColorType, gammaType> { |
public: |
using Element = uint16_t; |
PixelConverter(const SkPixmap& srcPixmap) { } |
Sk4f toSk4f(Element pixel) const { |
- SkPMColor pixel32 = SkPixel16ToPixel32(pixel); |
- return gammaType == kSRGB_SkGammaType |
- ? Sk4f_fromS32(pixel32) |
- : Sk4f_fromL32(pixel32); |
+ return pmcolor_to_rgba<gammaType>(SkPixel16ToPixel32(pixel)); |
} |
}; |
@@ -97,10 +101,7 @@ public: |
PixelConverter(const SkPixmap& srcPixmap) { } |
Sk4f toSk4f(Element pixel) const { |
- SkPMColor pixel32 = SkPixel4444ToPixel32(pixel); |
- return gammaType == kSRGB_SkGammaType |
- ? Sk4f_fromS32(pixel32) |
- : Sk4f_fromL32(pixel32); |
+ return pmcolor_to_rgba<gammaType>(SkPixel4444ToPixel32(pixel)); |
} |
}; |
@@ -139,7 +140,7 @@ public: |
fColorTable = (Sk4f*)SkAlign16((intptr_t)fColorTableStorage.get()); |
for (int i = 0; i < skColorTable->count(); i++) { |
- fColorTable[i] = this->convertPixel((*skColorTable)[i]); |
+ fColorTable[i] = pmcolor_to_rgba<gammaType>((*skColorTable)[i]); |
} |
} |
@@ -157,21 +158,7 @@ public: |
private: |
static const size_t kColorTableSize = sizeof(Sk4f[256]) + 12; |
- Sk4f convertPixel(SkPMColor pmColor) { |
- Sk4f pixel = to_4f(pmColor); |
- float alpha = get_alpha(pixel); |
- if (alpha != 0.0f) { |
- float invAlpha = 1.0f / alpha; |
- Sk4f normalize = {invAlpha, invAlpha, invAlpha, 1.0f / 255.0f}; |
- pixel = pixel * normalize; |
- if (gammaType == kSRGB_SkGammaType) { |
- pixel = linear_to_srgb(pixel); |
- } |
- return pixel; |
- } else { |
- return Sk4f{0.0f}; |
- } |
- } |
+ |
SkAutoMalloc fColorTableStorage{kColorTableSize}; |
Sk4f* fColorTable; |
}; |