Index: src/image/SkImage_Raster.cpp |
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp |
index 64f875924e6796e4c8030a87bfaf4f7bca69f4b9..c88e17689c868e612653b0f66ac0361e31fd3d5f 100644 |
--- a/src/image/SkImage_Raster.cpp |
+++ b/src/image/SkImage_Raster.cpp |
@@ -22,7 +22,7 @@ |
class SkImage_Raster : public SkImage_Base { |
public: |
- static bool ValidArgs(const Info& info, size_t rowBytes, SkColorTable* ctable, |
+ static bool ValidArgs(const Info& info, size_t rowBytes, bool hasColorTable, |
size_t* minSize) { |
const int maxDimension = SK_MaxS32 >> 2; |
@@ -44,8 +44,7 @@ public: |
} |
const bool needsCT = kIndex_8_SkColorType == info.colorType(); |
- const bool hasCT = nullptr != ctable; |
- if (needsCT != hasCT) { |
+ if (needsCT != hasColorTable) { |
return false; |
} |
@@ -218,7 +217,7 @@ SkImage* SkImage_Raster::onNewSubset(const SkIRect& subset) const { |
SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, size_t rowBytes, |
SkColorTable* ctable) { |
size_t size; |
- if (!SkImage_Raster::ValidArgs(info, rowBytes, ctable, &size) || !pixels) { |
+ if (!SkImage_Raster::ValidArgs(info, rowBytes, ctable != nullptr, &size) || !pixels) { |
return nullptr; |
} |
@@ -230,7 +229,7 @@ SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, siz |
SkImage* SkImage::NewRasterData(const SkImageInfo& info, SkData* data, size_t rowBytes) { |
size_t size; |
- if (!SkImage_Raster::ValidArgs(info, rowBytes, nullptr, &size) || !data) { |
+ if (!SkImage_Raster::ValidArgs(info, rowBytes, false, &size) || !data) { |
return nullptr; |
} |
@@ -246,7 +245,7 @@ SkImage* SkImage::NewRasterData(const SkImageInfo& info, SkData* data, size_t ro |
SkImage* SkImage::NewFromRaster(const SkImageInfo& info, const void* pixels, size_t rowBytes, |
RasterReleaseProc proc, ReleaseContext ctx) { |
size_t size; |
- if (!SkImage_Raster::ValidArgs(info, rowBytes, nullptr, &size) || !pixels) { |
+ if (!SkImage_Raster::ValidArgs(info, rowBytes, false, &size) || !pixels) { |
return nullptr; |
} |
@@ -258,7 +257,7 @@ SkImage* SkImage::NewFromRaster(const SkImageInfo& info, const void* pixels, siz |
SkImage* SkNewImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr, |
const SkIPoint& pixelRefOrigin, size_t rowBytes, |
const SkSurfaceProps* props) { |
- if (!SkImage_Raster::ValidArgs(info, rowBytes, nullptr, nullptr)) { |
+ if (!SkImage_Raster::ValidArgs(info, rowBytes, false, nullptr)) { |
return nullptr; |
} |
return new SkImage_Raster(info, pr, pixelRefOrigin, rowBytes, props); |
@@ -268,7 +267,13 @@ SkImage* SkNewImageFromRasterBitmap(const SkBitmap& bm, const SkSurfaceProps* pr |
ForceCopyMode forceCopy) { |
SkASSERT(nullptr == bm.getTexture()); |
- if (!SkImage_Raster::ValidArgs(bm.info(), bm.rowBytes(), nullptr, nullptr)) { |
+ bool hasColorTable = false; |
+ if (kIndex_8_SkColorType == bm.colorType()) { |
+ SkAutoLockPixels autoLockPixels(bm); |
+ hasColorTable = bm.getColorTable() != nullptr; |
+ } |
+ |
+ if (!SkImage_Raster::ValidArgs(bm.info(), bm.rowBytes(), hasColorTable, nullptr)) { |
return nullptr; |
} |