1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2016 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef DecodeFile_DEFINED 9cb93a386Sopenharmony_ci#define DecodeFile_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/codec/SkCodec.h" 12cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 13cb93a386Sopenharmony_ci#include "include/core/SkData.h" 14cb93a386Sopenharmony_ci#include "include/core/SkImage.h" 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_cistatic inline bool decode_file(sk_sp<SkData> data, SkBitmap* bitmap, 17cb93a386Sopenharmony_ci SkColorType colorType = kN32_SkColorType, 18cb93a386Sopenharmony_ci bool requireUnpremul = false) { 19cb93a386Sopenharmony_ci std::unique_ptr<SkCodec> codec = SkCodec::MakeFromData(std::move(data)); 20cb93a386Sopenharmony_ci if (!codec) { 21cb93a386Sopenharmony_ci return false; 22cb93a386Sopenharmony_ci } 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci SkImageInfo info = codec->getInfo().makeColorType(colorType); 25cb93a386Sopenharmony_ci if (requireUnpremul && kPremul_SkAlphaType == info.alphaType()) { 26cb93a386Sopenharmony_ci info = info.makeAlphaType(kUnpremul_SkAlphaType); 27cb93a386Sopenharmony_ci } 28cb93a386Sopenharmony_ci 29cb93a386Sopenharmony_ci if (!bitmap->tryAllocPixels(info)) { 30cb93a386Sopenharmony_ci return false; 31cb93a386Sopenharmony_ci } 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci return SkCodec::kSuccess == codec->getPixels(info, bitmap->getPixels(), bitmap->rowBytes()); 34cb93a386Sopenharmony_ci} 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_cistatic inline bool decode_file(const char* filename, SkBitmap* bitmap, 37cb93a386Sopenharmony_ci SkColorType colorType = kN32_SkColorType, 38cb93a386Sopenharmony_ci bool requireUnpremul = false) { 39cb93a386Sopenharmony_ci return decode_file(SkData::MakeFromFileName(filename), bitmap, colorType, requireUnpremul); 40cb93a386Sopenharmony_ci} 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_cistatic inline sk_sp<SkImage> decode_file(const char filename[]) { 43cb93a386Sopenharmony_ci sk_sp<SkData> data(SkData::MakeFromFileName(filename)); 44cb93a386Sopenharmony_ci return data ? SkImage::MakeFromEncoded(data) : nullptr; 45cb93a386Sopenharmony_ci} 46cb93a386Sopenharmony_ci#endif // DecodeFile_DEFINED 47