| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_UTILITY_CLOUD_PRINT_PWG_ENCODER_H_ |
| #define CHROME_UTILITY_CLOUD_PRINT_PWG_ENCODER_H_ |
| |
| #include <string> |
| |
| #include "base/basictypes.h" |
| |
| namespace cloud_print { |
| |
| class BitmapImage; |
| |
| struct PwgHeaderInfo { |
| PwgHeaderInfo() |
| : dpi(300), |
| total_pages(1), |
| flipx(false), |
| flipy(false), |
| color_space(SRGB), |
| duplex(false), |
| tumble(false) {} |
| enum ColorSpace { SGRAY = 18, SRGB = 19 }; |
| uint32 dpi; |
| uint32 total_pages; |
| bool flipx; |
| bool flipy; |
| ColorSpace color_space; |
| bool duplex; |
| bool tumble; |
| }; |
| |
| class PwgEncoder { |
| public: |
| PwgEncoder(); |
| |
| void EncodeDocumentHeader(std::string *output) const; |
| bool EncodePage(const BitmapImage& image, |
| const PwgHeaderInfo& pwg_header_info, |
| std::string* output) const; |
| |
| private: |
| void EncodePageHeader(const BitmapImage& image, |
| const PwgHeaderInfo& pwg_header_info, |
| std::string* output) const; |
| |
| template <typename InputStruct, class RandomAccessIterator> |
| void EncodeRow(RandomAccessIterator pos, |
| RandomAccessIterator row_end, |
| bool monochrome, |
| std::string* output) const; |
| |
| template <typename InputStruct> |
| bool EncodePageWithColorspace(const BitmapImage& image, |
| const PwgHeaderInfo& pwg_header_info, |
| std::string* output) const; |
| |
| const uint8* GetRow(const BitmapImage& image, int row, bool flipy) const; |
| }; |
| |
| } // namespace cloud_print |
| |
| #endif // CHROME_UTILITY_CLOUD_PRINT_PWG_ENCODER_H_ |