/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef DecodeFile_DEFINED #define DecodeFile_DEFINED #include "include/codec/SkCodec.h" #include "include/core/SkBitmap.h" #include "include/core/SkData.h" #include "include/core/SkImage.h" static inline bool decode_file(sk_sp data, SkBitmap* bitmap, SkColorType colorType = kN32_SkColorType, bool requireUnpremul = false) { std::unique_ptr codec = SkCodec::MakeFromData(std::move(data)); if (!codec) { return false; } SkImageInfo info = codec->getInfo().makeColorType(colorType); if (requireUnpremul && kPremul_SkAlphaType == info.alphaType()) { info = info.makeAlphaType(kUnpremul_SkAlphaType); } if (!bitmap->tryAllocPixels(info)) { return false; } return SkCodec::kSuccess == codec->getPixels(info, bitmap->getPixels(), bitmap->rowBytes()); } static inline bool decode_file(const char* filename, SkBitmap* bitmap, SkColorType colorType = kN32_SkColorType, bool requireUnpremul = false) { return decode_file(SkData::MakeFromFileName(filename), bitmap, colorType, requireUnpremul); } static inline sk_sp decode_file(const char filename[]) { sk_sp data(SkData::MakeFromFileName(filename)); return data ? SkImage::MakeFromEncoded(data) : nullptr; } #endif // DecodeFile_DEFINED