]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
1 | // |
2 | // Copyright 2005-2007 Adobe Systems Incorporated | |
3 | // | |
4 | // Distributed under the Boost Software License, Version 1.0 | |
5 | // See accompanying file LICENSE_1_0.txt or copy at | |
6 | // http://www.boost.org/LICENSE_1_0.txt | |
7 | // | |
7c673cae FG |
8 | #ifdef WIN32 |
9 | #define _CRT_SECURE_NO_DEPRECATE 1 | |
92f5a8d4 | 10 | #pragma warning(disable : 4244) // |
7c673cae FG |
11 | #pragma warning(disable : 4996) // MSFT declared it deprecated |
12 | #endif | |
13 | ||
92f5a8d4 TL |
14 | // Example file to demonstrate how to create a model of a pixel iterator |
15 | ||
16 | // FIXME: Review and remove if possible: gcc doesn't compile unless we forward-declare at_c before we include gil... | |
7c673cae FG |
17 | namespace boost { namespace gil { |
18 | template <typename ChannelReference, typename Layout> struct interleaved_ref; | |
19 | template <typename ColorBase> struct element_reference_type; | |
20 | ||
21 | template <int K, typename ChannelReference, typename Layout> | |
92f5a8d4 | 22 | typename element_reference_type<interleaved_ref<ChannelReference,Layout>>::type |
7c673cae FG |
23 | at_c(const interleaved_ref<ChannelReference,Layout>& p); |
24 | } } | |
25 | ||
92f5a8d4 TL |
26 | #include <boost/gil.hpp> |
27 | #include <boost/gil/extension/io/jpeg.hpp> | |
28 | ||
7c673cae | 29 | #include <iostream> |
92f5a8d4 | 30 | |
7c673cae FG |
31 | #include "interleaved_ptr.hpp" |
32 | ||
92f5a8d4 | 33 | int main(int argc, char* argv[]) |
7c673cae FG |
34 | { |
35 | using namespace boost::gil; | |
36 | ||
92f5a8d4 TL |
37 | using rgb8_interleaved_ptr = interleaved_ptr<unsigned char*, rgb_layout_t>; |
38 | using rgb8c_interleaved_ptr = interleaved_ptr<unsigned char const*, rgb_layout_t>; | |
7c673cae | 39 | |
92f5a8d4 TL |
40 | boost::function_requires<MutablePixelIteratorConcept<rgb8_interleaved_ptr>>(); |
41 | boost::function_requires<PixelIteratorConcept<rgb8c_interleaved_ptr>>(); | |
42 | boost::function_requires<MemoryBasedIteratorConcept<memory_based_step_iterator<rgb8_interleaved_ptr>> >(); | |
7c673cae | 43 | |
92f5a8d4 TL |
44 | boost::function_requires<MutablePixelConcept<rgb8_interleaved_ptr::value_type>>(); |
45 | boost::function_requires<PixelConcept<rgb8c_interleaved_ptr::value_type>>(); | |
7c673cae | 46 | |
92f5a8d4 TL |
47 | using rgb8_interleaved_view_t = type_from_x_iterator<rgb8_interleaved_ptr >::view_t; |
48 | using rgb8c_interleaved_view_t = type_from_x_iterator<rgb8c_interleaved_ptr>::view_t; | |
7c673cae | 49 | |
92f5a8d4 TL |
50 | boost::function_requires<MutableImageViewConcept<rgb8_interleaved_view_t>>(); |
51 | boost::function_requires<ImageViewConcept<rgb8c_interleaved_view_t>>(); | |
7c673cae FG |
52 | |
53 | rgb8_image_t img; | |
92f5a8d4 | 54 | read_image("test.jpg", img, jpeg_tag{}); |
7c673cae FG |
55 | |
56 | // Get a raw pointer to the RGB buffer | |
57 | unsigned char* raw_ptr=&view(img)[0][0]; | |
58 | ||
59 | // Construct a view from it, without casting it to rgb8_pixel_t* | |
60 | rgb8_interleaved_view_t src_view=interleaved_view(img.width(),img.height(),rgb8_interleaved_ptr(raw_ptr), | |
61 | view(img).pixels().row_size()); | |
62 | ||
63 | // Apply view transformations and algorithms on it | |
92f5a8d4 | 64 | write_view("out-interleaved_ptr.jpg",nth_channel_view(flipped_up_down_view(src_view),1), jpeg_tag{}); |
7c673cae FG |
65 | |
66 | return 0; | |
67 | } | |
68 | ||
69 |