summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]base/gfx/png_encoder.cc12
-rwxr-xr-x[-rw-r--r--]base/gfx/png_encoder.h10
-rwxr-xr-x[-rw-r--r--]chrome/browser/fav_icon_helper.cc7
-rwxr-xr-x[-rw-r--r--]chrome/browser/gears_integration.cc8
-rwxr-xr-x[-rw-r--r--]chrome/browser/importer/importer.cc5
-rwxr-xr-x[-rw-r--r--]chrome/browser/webdata/web_database.cc6
-rwxr-xr-x[-rw-r--r--]chrome/common/security_filter_peer.cc9
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;
}