DecodeFile.h revision ccebcec4aca71fd17626b45f27fbe613bfa18b64
1d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett/* 2d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * Copyright 2016 Google Inc. 3d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * 4d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * Use of this source code is governed by a BSD-style license that can be 5d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * found in the LICENSE file. 6d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett */ 7d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 8d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett#include "SkBitmap.h" 9d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett#include "SkCodec.h" 10d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett#include "SkData.h" 11ccebcec4aca71fd17626b45f27fbe613bfa18b64reed#include "SkImage.h" 12d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 13ccebcec4aca71fd17626b45f27fbe613bfa18b64reedstatic inline bool decode_file(const char* filename, SkBitmap* bitmap, 14ccebcec4aca71fd17626b45f27fbe613bfa18b64reed SkColorType colorType = kN32_SkColorType, 15ccebcec4aca71fd17626b45f27fbe613bfa18b64reed bool requireUnpremul = false) { 16d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett SkASSERT(kIndex_8_SkColorType != colorType); 1738d909ec2875f79952de08f36adfaac5680d2c53bungeman sk_sp<SkData> data(SkData::MakeFromFileName(filename)); 1838d909ec2875f79952de08f36adfaac5680d2c53bungeman SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(data.get())); 19d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett if (!codec) { 20d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett return false; 21d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett } 22d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 23d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett SkImageInfo info = codec->getInfo().makeColorType(colorType); 24d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett if (requireUnpremul && kPremul_SkAlphaType == info.alphaType()) { 25d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett info = info.makeAlphaType(kUnpremul_SkAlphaType); 26d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett } 27d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 28d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett if (!bitmap->tryAllocPixels(info)) { 29d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett return false; 30d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett } 31d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 32d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett return SkCodec::kSuccess == codec->getPixels(info, bitmap->getPixels(), bitmap->rowBytes()); 33d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett} 34ccebcec4aca71fd17626b45f27fbe613bfa18b64reed 35ccebcec4aca71fd17626b45f27fbe613bfa18b64reedstatic inline sk_sp<SkImage> decode_file(const char filename[]) { 36ccebcec4aca71fd17626b45f27fbe613bfa18b64reed sk_sp<SkData> data(SkData::MakeFromFileName(filename)); 37ccebcec4aca71fd17626b45f27fbe613bfa18b64reed return data ? SkImage::MakeFromEncoded(data) : nullptr; 38ccebcec4aca71fd17626b45f27fbe613bfa18b64reed} 39