diff options
-rwxr-xr-x[-rw-r--r--] | base/gfx/png_encoder.cc | 12 | ||||
-rwxr-xr-x[-rw-r--r--] | base/gfx/png_encoder.h | 10 | ||||
-rwxr-xr-x[-rw-r--r--] | chrome/browser/fav_icon_helper.cc | 7 | ||||
-rwxr-xr-x[-rw-r--r--] | chrome/browser/gears_integration.cc | 8 | ||||
-rwxr-xr-x[-rw-r--r--] | chrome/browser/importer/importer.cc | 5 | ||||
-rwxr-xr-x[-rw-r--r--] | chrome/browser/webdata/web_database.cc | 6 | ||||
-rwxr-xr-x[-rw-r--r--] | chrome/common/security_filter_peer.cc | 9 |
7 files changed, 28 insertions, 29 deletions
diff --git a/base/gfx/png_encoder.cc b/base/gfx/png_encoder.cc index 7b44a52..3349fd6 100644..100755 --- a/base/gfx/png_encoder.cc +++ b/base/gfx/png_encoder.cc @@ -5,6 +5,7 @@ #include "base/basictypes.h" #include "base/gfx/png_encoder.h" #include "base/logging.h" +#include "skia/include/SkBitmap.h" extern "C" { #include "png.h" @@ -191,3 +192,14 @@ bool PNGEncoder::Encode(const unsigned char* input, ColorFormat format, return true; } +// static +bool PNGEncoder::EncodeBGRASkBitmap(const SkBitmap& input, + bool discard_transparency, + std::vector<unsigned char>* output) { + SkAutoLockPixels input_lock(input); + DCHECK(input.empty() || input.bytesPerPixel() == 4); + return Encode(static_cast<unsigned char*>(input.getPixels()), + PNGEncoder::FORMAT_BGRA, input.width(), input.height(), + input.rowBytes(), discard_transparency, output); +} + diff --git a/base/gfx/png_encoder.h b/base/gfx/png_encoder.h index e346bd0..7d284be 100644..100755 --- a/base/gfx/png_encoder.h +++ b/base/gfx/png_encoder.h @@ -9,6 +9,8 @@ #include "base/basictypes.h" +class SkBitmap; + // Interface for encoding PNG data. This is a wrapper around libpng, // which has an inconvenient interface for callers. This is currently designed // for use in tests only (where we control the files), so the handling isn't as @@ -51,6 +53,14 @@ class PNGEncoder { bool discard_transparency, std::vector<unsigned char>* output); + // Call PNGEncoder::Encode on the supplied SkBitmap |input|, which is assumed + // to be BGRA, 32 bits per pixel. The params |discard_transparency| and + // |output| are passed directly to Encode; refer to Encode for more + // information. During the call, an SkAutoLockPixels lock is held on |input|. + static bool EncodeBGRASkBitmap(const SkBitmap& input, + bool discard_transparency, + std::vector<unsigned char>* output); + private: DISALLOW_EVIL_CONSTRUCTORS(PNGEncoder); }; diff --git a/chrome/browser/fav_icon_helper.cc b/chrome/browser/fav_icon_helper.cc index 6722336fb..cd6808b 100644..100755 --- a/chrome/browser/fav_icon_helper.cc +++ b/chrome/browser/fav_icon_helper.cc @@ -84,12 +84,7 @@ void FavIconHelper::SetFavIcon( if (GetHistoryService() && !profile()->IsOffTheRecord()) { std::vector<unsigned char> image_data; - SkAutoLockPixels icon_lock(sized_image); - PNGEncoder::Encode( - reinterpret_cast<unsigned char*>(sized_image.getPixels()), - PNGEncoder::FORMAT_BGRA, sized_image.width(), - sized_image.height(), sized_image.width()* 4, false, - &image_data); + PNGEncoder::EncodeBGRASkBitmap(sized_image, false, &image_data); GetHistoryService()->SetFavIcon(i->second.url, i->second.fav_icon_url, image_data); } diff --git a/chrome/browser/gears_integration.cc b/chrome/browser/gears_integration.cc index 580acba..0801cd6 100644..100755 --- a/chrome/browser/gears_integration.cc +++ b/chrome/browser/gears_integration.cc @@ -117,13 +117,7 @@ static GURL ConvertSkBitmapToDataURL(const SkBitmap& icon) { // Get the FavIcon data. std::vector<unsigned char> icon_data; - { - SkAutoLockPixels icon_lock(icon); - PNGEncoder::Encode(static_cast<unsigned char*>(icon.getPixels()), - PNGEncoder::FORMAT_BGRA, icon.width(), - icon.height(), icon.width()* 4, false, - &icon_data); - } + PNGEncoder::EncodeBGRASkBitmap(icon, false, &icon_data); // Base64-encode it (to make it a data URL). std::string icon_data_str(reinterpret_cast<char*>(&icon_data[0]), diff --git a/chrome/browser/importer/importer.cc b/chrome/browser/importer/importer.cc index 52a035d..f3cb392 100644..100755 --- a/chrome/browser/importer/importer.cc +++ b/chrome/browser/importer/importer.cc @@ -389,10 +389,7 @@ bool Importer::ReencodeFavicon(const unsigned char* src_data, size_t src_len, } // Encode our bitmap as a PNG. - SkAutoLockPixels decoded_lock(decoded); - PNGEncoder::Encode(reinterpret_cast<unsigned char*>(decoded.getPixels()), - PNGEncoder::FORMAT_BGRA, decoded.width(), - decoded.height(), decoded.width() * 4, false, png_data); + PNGEncoder::EncodeBGRASkBitmap(decoded, false, png_data); return true; } diff --git a/chrome/browser/webdata/web_database.cc b/chrome/browser/webdata/web_database.cc index af78244..83fa217 100644..100755 --- a/chrome/browser/webdata/web_database.cc +++ b/chrome/browser/webdata/web_database.cc @@ -201,11 +201,7 @@ bool WebDatabase::SetWebAppImage(const GURL& url, } std::vector<unsigned char> image_data; - - SkAutoLockPixels pixel_lock(image); - PNGEncoder::Encode(reinterpret_cast<unsigned char*>(image.getPixels()), - PNGEncoder::FORMAT_BGRA, image.width(), - image.height(), image.width() * 4, false, &image_data); + PNGEncoder::EncodeBGRASkBitmap(image, false, &image_data); s.bind_string(0, history::HistoryDatabase::GURLToDatabaseURL(url)); s.bind_int(1, image.width()); diff --git a/chrome/common/security_filter_peer.cc b/chrome/common/security_filter_peer.cc index 58db3ee..e984bc4 100644..100755 --- a/chrome/common/security_filter_peer.cc +++ b/chrome/common/security_filter_peer.cc @@ -298,13 +298,8 @@ bool ImageFilterPeer::DataReady() { // Now encode it to a PNG. std::vector<unsigned char> output; - unsigned char* input = - static_cast<unsigned char*>(canvas.getDevice()->accessBitmap(false). - getPixels()); - if (!PNGEncoder::Encode(input, - PNGEncoder::FORMAT_BGRA, - image.width(), image.height(), - image.width() * 4, false, &output)) { + if (!PNGEncoder::EncodeBGRASkBitmap(canvas.getDevice()->accessBitmap(false), + false, &output)) { return false; } |