1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/quantize.h
3 // Purpose:     wxQuantizer class
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     22/6/2000
7 // RCS-ID:      $Id: quantize.h 49804 2007-11-10 01:09:42Z VZ $
8 // Copyright:   (c) Julian Smart
9 // Licence:
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_QUANTIZE_H_
13 #define _WX_QUANTIZE_H_
14 
15 #include "wx/object.h"
16 
17 /*
18  * From jquant2.c
19  *
20  * Copyright (C) 1991-1996, Thomas G. Lane.
21  * This file is part of the Independent JPEG Group's software.
22  * For conditions of distribution and use, see the accompanying README file.
23  */
24 
25 class WXDLLIMPEXP_FWD_CORE wxImage;
26 class WXDLLIMPEXP_FWD_CORE wxPalette;
27 
28 /*
29  * wxQuantize
30  * Based on the JPEG quantization code. Reduces the number of colours in a wxImage.
31  */
32 
33 #define wxQUANTIZE_INCLUDE_WINDOWS_COLOURS      0x01
34 #define wxQUANTIZE_RETURN_8BIT_DATA             0x02
35 #define wxQUANTIZE_FILL_DESTINATION_IMAGE       0x04
36 
37 class WXDLLEXPORT wxQuantize: public wxObject
38 {
39 public:
DECLARE_DYNAMIC_CLASS(wxQuantize)40 DECLARE_DYNAMIC_CLASS(wxQuantize)
41 
42 //// Constructor
43 
44     wxQuantize() {}
~wxQuantize()45     virtual ~wxQuantize() {}
46 
47 //// Operations
48 
49     // Reduce the colours in the source image and put the result into the
50     // destination image. Both images may be the same, to overwrite the source image.
51     // Specify an optional palette pointer to receive the resulting palette.
52     // This palette may be passed to ConvertImageToBitmap, for example.
53     // If you pass a palette pointer, you must free the palette yourself.
54 
55     static bool Quantize(const wxImage& src, wxImage& dest, wxPalette** pPalette, int desiredNoColours = 236,
56         unsigned char** eightBitData = 0, int flags = wxQUANTIZE_INCLUDE_WINDOWS_COLOURS|wxQUANTIZE_FILL_DESTINATION_IMAGE|wxQUANTIZE_RETURN_8BIT_DATA);
57 
58     // This version sets a palette in the destination image so you don't
59     // have to manage it yourself.
60 
61     static bool Quantize(const wxImage& src, wxImage& dest, int desiredNoColours = 236,
62         unsigned char** eightBitData = 0, int flags = wxQUANTIZE_INCLUDE_WINDOWS_COLOURS|wxQUANTIZE_FILL_DESTINATION_IMAGE|wxQUANTIZE_RETURN_8BIT_DATA);
63 
64 //// Helpers
65 
66     // Converts input bitmap(s) into 8bit representation with custom palette
67 
68     // in_rows and out_rows are arrays [0..h-1] of pointer to rows
69     // (in_rows contains w * 3 bytes per row, out_rows w bytes per row)
70     // fills out_rows with indexes into palette (which is also stored into palette variable)
71     static void DoQuantize(unsigned w, unsigned h, unsigned char **in_rows, unsigned char **out_rows, unsigned char *palette, int desiredNoColours);
72 
73 };
74 
75 #endif
76     // _WX_QUANTIZE_H_
77