Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Unified Diff: src/core/SkDevice.cpp

Issue 16410009: Add an option to create unpremultiplied bitmaps. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/core/SkDevice.cpp
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index dee5bc76afb67a85d796d73905ddd365e3fdce8d..ffb2fcc1e15b1cd56acbc5f793fdebecd4cc0d83 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -30,6 +30,8 @@ SkDevice::SkDevice(const SkBitmap& bitmap)
, fAttachedToCanvas(false)
#endif
{
+ SkASSERT(bitmap.config() != SkBitmap::kIndex8_Config);
+ SkASSERT(bitmap.premultiplied());
fOrigin.setZero();
fMetaData = NULL;
}
@@ -40,6 +42,8 @@ SkDevice::SkDevice(const SkBitmap& bitmap, const SkDeviceProperties& devicePrope
, fAttachedToCanvas(false)
#endif
{
+ SkASSERT(bitmap.config() != SkBitmap::kIndex8_Config);
+ SkASSERT(bitmap.premultiplied());
fOrigin.setZero();
fMetaData = NULL;
}
@@ -53,6 +57,9 @@ SkDevice::SkDevice(SkBitmap::Config config, int width, int height, bool isOpaque
fOrigin.setZero();
fMetaData = NULL;
+ if (SkBitmap::kIndex8_Config == config) {
+ config = SkBitmap::kARGB_8888_Config;
+ }
fBitmap.setConfig(config, width, height);
fBitmap.allocPixels();
fBitmap.setIsOpaque(isOpaque);
@@ -71,6 +78,9 @@ SkDevice::SkDevice(SkBitmap::Config config, int width, int height, bool isOpaque
fOrigin.setZero();
fMetaData = NULL;
+ if (SkBitmap::kIndex8_Config == config) {
+ config = SkBitmap::kARGB_8888_Config;
+ }
fBitmap.setConfig(config, width, height);
fBitmap.allocPixels();
fBitmap.setIsOpaque(isOpaque);
@@ -84,6 +94,8 @@ SkDevice::~SkDevice() {
}
void SkDevice::replaceBitmapBackendForRasterSurface(const SkBitmap& bm) {
+ SkASSERT(bm.config() != SkBitmap::kIndex8_Config);
+ SkASSERT(bm.premultiplied());
SkASSERT(bm.width() == fBitmap.width());
SkASSERT(bm.height() == fBitmap.height());
fBitmap = bm; // intent is to use bm's pixelRef (and rowbytes/config)
@@ -108,6 +120,9 @@ SkDevice* SkDevice::onCreateCompatibleDevice(SkBitmap::Config config,
int width, int height,
bool isOpaque,
Usage usage) {
+ if (SkBitmap::kIndex8_Config == config) {
+ config = SkBitmap::kARGB_8888_Config;
+ }
return SkNEW_ARGS(SkDevice,(config, width, height, isOpaque, fLeakyProperties));
}

Powered by Google App Engine
This is Rietveld 408576698