1// Copyright 2014 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 "components/user_manager/user_image/user_image.h" 6 7#include "base/debug/trace_event.h" 8#include "third_party/skia/include/core/SkBitmap.h" 9#include "ui/gfx/codec/jpeg_codec.h" 10 11namespace user_manager { 12 13namespace { 14 15// Default quality for encoding user images. 16const int kDefaultEncodingQuality = 90; 17 18bool EncodeImageSkia(const gfx::ImageSkia& image, 19 std::vector<unsigned char>* output) { 20 TRACE_EVENT2("oobe", "EncodeImageSkia", 21 "width", image.width(), "height", image.height()); 22 if (image.isNull()) 23 return false; 24 const SkBitmap& bitmap = *image.bitmap(); 25 SkAutoLockPixels lock_image(bitmap); 26 return gfx::JPEGCodec::Encode( 27 reinterpret_cast<unsigned char*>(bitmap.getAddr32(0, 0)), 28 gfx::JPEGCodec::FORMAT_SkBitmap, 29 bitmap.width(), 30 bitmap.height(), 31 bitmap.width() * bitmap.bytesPerPixel(), 32 kDefaultEncodingQuality, output); 33} 34 35} // namespace 36 37// static 38UserImage UserImage::CreateAndEncode(const gfx::ImageSkia& image) { 39 RawImage raw_image; 40 if (EncodeImageSkia(image, &raw_image)) { 41 UserImage result(image, raw_image); 42 result.MarkAsSafe(); 43 return result; 44 } 45 return UserImage(image); 46} 47 48UserImage::UserImage() 49 : has_raw_image_(false), 50 is_safe_format_(false) { 51} 52 53UserImage::UserImage(const gfx::ImageSkia& image) 54 : image_(image), 55 has_raw_image_(false), 56 is_safe_format_(false) { 57} 58 59UserImage::UserImage(const gfx::ImageSkia& image, 60 const RawImage& raw_image) 61 : image_(image), 62 has_raw_image_(false), 63 is_safe_format_(false) { 64 has_raw_image_ = true; 65 raw_image_ = raw_image; 66} 67 68UserImage::~UserImage() {} 69 70void UserImage::DiscardRawImage() { 71 RawImage().swap(raw_image_); // Clear |raw_image_|. 72} 73 74void UserImage::MarkAsSafe() { 75 is_safe_format_ = true; 76} 77 78} // namespace user_manager 79