image_png_rep.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ui/gfx/image/image_png_rep.h"
6
7#include "base/logging.h"
8#include "third_party/skia/include/core/SkBitmap.h"
9#include "ui/gfx/codec/png_codec.h"
10#include "ui/gfx/size.h"
11
12namespace gfx {
13
14ImagePNGRep::ImagePNGRep()
15    : raw_data(NULL),
16      scale(1.0) {
17}
18
19ImagePNGRep::ImagePNGRep(const scoped_refptr<base::RefCountedMemory>& data,
20                         float data_scale)
21    : raw_data(data),
22      scale(data_scale) {
23}
24
25ImagePNGRep::~ImagePNGRep() {
26}
27
28gfx::Size ImagePNGRep::Size() const {
29  // The only way to get the width and height of a raw PNG stream, at least
30  // using the gfx::PNGCodec API, is to decode the whole thing.
31  CHECK(raw_data.get());
32  SkBitmap bitmap;
33  if (!gfx::PNGCodec::Decode(raw_data->front(), raw_data->size(),
34                             &bitmap)) {
35    LOG(ERROR) << "Unable to decode PNG.";
36    return gfx::Size(0, 0);
37  }
38  return gfx::Size(bitmap.width(), bitmap.height());
39}
40
41}  // namespace gfx
42