| Index: dm/DMWriteTask.cpp
|
| diff --git a/dm/DMWriteTask.cpp b/dm/DMWriteTask.cpp
|
| index 326d454150946f9584333e2977f964796568caa7..11a71faed60e96695cd92c903cc1c633c497c820 100644
|
| --- a/dm/DMWriteTask.cpp
|
| +++ b/dm/DMWriteTask.cpp
|
| @@ -1,6 +1,7 @@
|
| #include "DMWriteTask.h"
|
|
|
| #include "DMUtil.h"
|
| +#include "SkColorPriv.h"
|
| #include "SkCommandLineFlags.h"
|
| #include "SkImageDecoder.h"
|
| #include "SkImageEncoder.h"
|
| @@ -136,12 +137,17 @@ bool WriteTask::Expectations::check(const Task& task, SkBitmap bitmap) const {
|
| unpremul.setConfig(info);
|
| unpremul.allocPixels();
|
|
|
| + // Unpremultiply without changing native byte order.
|
| SkAutoLockPixels lockSrc(bitmap), lockDst(unpremul);
|
| const SkPMColor* src = (SkPMColor*)bitmap.getPixels();
|
| - SkColor* dst = (SkColor*)unpremul.getPixels();
|
| -
|
| + uint32_t* dst = (uint32_t*)unpremul.getPixels();
|
| for (size_t i = 0; i < bitmap.getSize()/4; i++) {
|
| - dst[i] = SkUnPreMultiply::PMColorToColor(src[i]);
|
| + const U8CPU a = SkGetPackedA32(src[i]);
|
| + const SkUnPreMultiply::Scale s = SkUnPreMultiply::GetScale(a);
|
| + dst[i] = SkPackARGB32NoCheck(a,
|
| + SkUnPreMultiply::ApplyScale(s, SkGetPackedR32(src[i])),
|
| + SkUnPreMultiply::ApplyScale(s, SkGetPackedG32(src[i])),
|
| + SkUnPreMultiply::ApplyScale(s, SkGetPackedB32(src[i])));
|
| }
|
| bitmap.swap(unpremul);
|
| }
|
|
|