12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/image/image_png_rep.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/logging.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/codec/png_codec.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/size.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ImagePNGRep::ImagePNGRep() 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : raw_data(NULL), 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scale(1.0) { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ImagePNGRep::ImagePNGRep(const scoped_refptr<base::RefCountedMemory>& data, 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) float data_scale) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : raw_data(data), 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scale(data_scale) { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ImagePNGRep::~ImagePNGRep() { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)gfx::Size ImagePNGRep::Size() const { 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The only way to get the width and height of a raw PNG stream, at least 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // using the gfx::PNGCodec API, is to decode the whole thing. 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(raw_data.get()); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SkBitmap bitmap; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!gfx::PNGCodec::Decode(raw_data->front(), raw_data->size(), 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &bitmap)) { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LOG(ERROR) << "Unable to decode PNG."; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size(0, 0); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size(bitmap.width(), bitmap.height()); 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace gfx 42