| // Copyright 2018 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #include "core/fxcodec/bmp/cfx_bmpcontext.h" |
| |
| #include <utility> |
| |
| #include "core/fxcodec/cfx_codec_memory.h" |
| #include "core/fxcodec/fx_codec.h" |
| #include "core/fxcodec/fx_codec_def.h" |
| #include "core/fxcrt/check.h" |
| |
| namespace fxcodec { |
| |
| CFX_BmpContext::CFX_BmpContext(ProgressiveDecoderContextDelegate* pDelegate) |
| : bmp_(this), delegate_(pDelegate) {} |
| |
| CFX_BmpContext::~CFX_BmpContext() = default; |
| |
| FX_FILESIZE CFX_BmpContext::GetAvailInput() const { |
| return bmp_.GetAvailInput(); |
| } |
| |
| void CFX_BmpContext::Input(RetainPtr<CFX_CodecMemory> codec_memory) { |
| bmp_.SetInputBuffer(std::move(codec_memory)); |
| } |
| |
| ProgressiveDecoderContext::Status CFX_BmpContext::DecodeImage() { |
| return bmp_.DecodeImage(); |
| } |
| |
| ProgressiveDecoderContext::Status CFX_BmpContext::ReadHeader( |
| int32_t* width, |
| int32_t* height, |
| int32_t* components, |
| pdfium::span<const FX_ARGB>* palette, |
| CFX_DIBAttribute* attribute) { |
| DCHECK(attribute); |
| |
| ProgressiveDecoderContext::Status status = bmp_.ReadHeader(); |
| if (status != ProgressiveDecoderContext::Status::kSuccess) { |
| return status; |
| } |
| |
| *width = bmp_.width(); |
| *height = bmp_.height(); |
| *components = bmp_.components(); |
| *palette = bmp_.palette(); |
| attribute->dpi_unit_ = CFX_DIBAttribute::kResUnitMeter; |
| attribute->x_dpi_ = bmp_.dpi_x(); |
| attribute->y_dpi_ = bmp_.dpi_y(); |
| return ProgressiveDecoderContext::Status::kSuccess; |
| } |
| |
| } // namespace fxcodec |