1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>paintlib: plpixel16.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.2 -->
<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Compound List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Compound Members</a></div>
<h1>plpixel16.h</h1><div class="fragment"><pre>00001 <span class="comment">/*</span>
00002 <span class="comment">/--------------------------------------------------------------------</span>
00003 <span class="comment">|</span>
00004 <span class="comment">| $Id: plpixel16_8h-source.html,v 1.2 2004/09/15 15:26:32 uzadow Exp $</span>
00005 <span class="comment">|</span>
00006 <span class="comment">| Copyright (c) 1996-2002 Ulrich von Zadow</span>
00007 <span class="comment">|</span>
00008 <span class="comment">\--------------------------------------------------------------------</span>
00009 <span class="comment">*/</span>
00010
00011 <span class="preprocessor">#ifndef INCL_PLPIXEL16</span>
00012 <span class="preprocessor"></span><span class="preprocessor">#define INCL_PLPIXEL16</span>
00013 <span class="preprocessor"></span>
00014 <span class="preprocessor">#include <math.h></span>
00015
00016 <span class="preprocessor">#include "plpixeldefs.h"</span>
00017 <span class="preprocessor">#include "<a class="code" href="plpaintlibdefs_8h.html">plpaintlibdefs.h</a>"</span>
00018 <span class="comment"></span>
00019 <span class="comment">//! 16 bit pixel class. A pixel in this class contains 5 bits of</span>
00020 <span class="comment">//! red, 6 of green and 5 of blue (in that order). The order of the </span>
00021 <span class="comment">//! color components is</span>
00022 <span class="comment">//! OS-dependent and defined in plpixeldefs.h. This class is meant to be</span>
00023 <span class="comment">//! fast, so all methods are inlined.</span>
<a name="l00024"></a><a class="code" href="classPLPixel16.html">00024</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classPLPixel16.html">PLPixel16</a>
00025 {
00026 <span class="keyword">public</span>:<span class="comment"></span>
00027 <span class="comment"> //!</span>
00028 <span class="comment"></span> <a class="code" href="classPLPixel16.html">PLPixel16</a> ();<span class="comment"></span>
00029 <span class="comment"> //!</span>
00030 <span class="comment"></span> <a class="code" href="classPLPixel16.html">PLPixel16</a> (PLBYTE r, PLBYTE g, PLBYTE b);<span class="comment"></span>
00031 <span class="comment"> //!</span>
00032 <span class="comment"></span> <span class="keywordtype">void</span> Set (PLBYTE r, PLBYTE g, PLBYTE b);<span class="comment"></span>
00033 <span class="comment"> //!</span>
00034 <span class="comment"></span> <span class="keywordtype">void</span> SetR (PLBYTE r);<span class="comment"></span>
00035 <span class="comment"> //!</span>
00036 <span class="comment"></span> <span class="keywordtype">void</span> SetG (PLBYTE g);<span class="comment"></span>
00037 <span class="comment"> //!</span>
00038 <span class="comment"></span> <span class="keywordtype">void</span> SetB (PLBYTE b);<span class="comment"></span>
00039 <span class="comment"> //!</span>
00040 <span class="comment"></span> PLBYTE GetR () <span class="keyword">const</span>;<span class="comment"></span>
00041 <span class="comment"> //!</span>
00042 <span class="comment"></span> PLBYTE GetG () <span class="keyword">const</span>;<span class="comment"></span>
00043 <span class="comment"> //!</span>
00044 <span class="comment"></span> PLBYTE GetB () <span class="keyword">const</span>;
00045 <span class="comment"></span>
00046 <span class="comment"> //!</span>
00047 <span class="comment"></span> <a class="code" href="classPLPixel16.html">PLPixel16</a> operator = (<span class="keyword">const</span> <a class="code" href="classPLPixel32.html">PLPixel32</a>& Pix);
00048 <span class="comment"></span>
00049 <span class="comment"> //!</span>
00050 <span class="comment"></span> operator PLPixel32 () <span class="keyword">const</span>;
00051 <span class="comment"></span>
00052 <span class="comment"> //!</span>
00053 <span class="comment"></span> <a class="code" href="classPLPixel16.html">PLPixel16</a> operator = (<span class="keyword">const</span> <a class="code" href="classPLPixel24.html">PLPixel24</a>& Pix);
00054 <span class="comment"></span>
00055 <span class="comment"> //!</span>
00056 <span class="comment"></span> operator PLPixel24 () <span class="keyword">const</span>;
00057 <span class="comment"></span>
00058 <span class="comment"> //!</span>
00059 <span class="comment"></span> <span class="keywordtype">bool</span> operator ==(<span class="keyword">const</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> Pix) <span class="keyword">const</span>;
00060 <span class="comment"></span>
00061 <span class="comment"> //!</span>
00062 <span class="comment"></span> <span class="keywordtype">bool</span> operator !=(<span class="keyword">const</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> Pix) <span class="keyword">const</span>;
00063 <span class="comment"></span>
00064 <span class="comment"> //! Simple and fast 'distance' between two pixels. Just adds the</span>
00065 <span class="comment"> //! distances between the color components and treats colors</span>
00066 <span class="comment"> //! equally.</span>
00067 <span class="comment"></span> <span class="keywordtype">int</span> <a class="code" href="classPLPixel16.html#a15">BoxDist</a> (<span class="keyword">const</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> Pix) <span class="keyword">const</span>;
00068
00069 <span class="keyword">private</span>:
00070 PLWORD m_Data;
00071 };
00072
00073 <span class="keyword">inline</span> PLPixel16::PLPixel16()
00074 {
00075 }
00076
00077
00078 <span class="keyword">inline</span> PLPixel16::PLPixel16(PLBYTE r, PLBYTE g, PLBYTE b)
00079 {
00080 Set (r, g, b);
00081 }
00082
00083
00084 <span class="keyword">inline</span> <span class="keywordtype">void</span> PLPixel16::Set (PLBYTE r, PLBYTE g, PLBYTE b)
00085 {
00086 <span class="preprocessor">#ifdef PL_PIXEL_BGRA_ORDER</span>
00087 <span class="preprocessor"></span> m_Data = ((r&0xF8) << 8) | ((g&0xFC) << 3) | (b>>3);
00088 <span class="preprocessor">#else</span>
00089 <span class="preprocessor"></span> m_Data = (b&0xF8) << 8 | ((g&0xFC) << 3) | (r>>3);
00090 <span class="preprocessor">#endif </span>
00091 <span class="preprocessor"></span>}
00092
00093 <span class="keyword">inline</span> <span class="keywordtype">void</span> PLPixel16::SetR(PLBYTE r)
00094 {
00095 <span class="preprocessor">#ifdef PL_PIXEL_BGRA_ORDER</span>
00096 <span class="preprocessor"></span> m_Data = (m_Data&0x07FF)|((r&0xF8)<<8);
00097 <span class="preprocessor">#else</span>
00098 <span class="preprocessor"></span> m_Data = (m_Data&0xFFE0)|(r>>3);
00099 <span class="preprocessor">#endif</span>
00100 <span class="preprocessor"></span>}
00101
00102 <span class="keyword">inline</span> <span class="keywordtype">void</span> PLPixel16::SetG(PLBYTE g)
00103 {
00104 m_Data = (m_Data&0xF81F)|((g&0xFC)<<3);
00105 }
00106
00107
00108 <span class="keyword">inline</span> <span class="keywordtype">void</span> PLPixel16::SetB(PLBYTE b)
00109 {
00110 <span class="preprocessor">#ifdef PL_PIXEL_BGRA_ORDER</span>
00111 <span class="preprocessor"></span> m_Data = (m_Data&0xFFE0)|(b>>3);
00112 <span class="preprocessor">#else</span>
00113 <span class="preprocessor"></span> m_Data = (m_Data&0x07FF)|((b&0xF8)<<8);
00114 <span class="preprocessor">#endif</span>
00115 <span class="preprocessor"></span>}
00116
00117 <span class="keyword">inline</span> PLBYTE PLPixel16::GetR()<span class="keyword"> const</span>
00118 <span class="keyword"></span>{
00119 <span class="preprocessor">#ifdef PL_PIXEL_BGRA_ORDER</span>
00120 <span class="preprocessor"></span> <span class="keywordflow">return</span> (m_Data&0xF800)>>8;
00121 <span class="preprocessor">#else</span>
00122 <span class="preprocessor"></span> <span class="keywordflow">return</span> (m_Data&0x001F)<<3;
00123 <span class="preprocessor">#endif </span>
00124 <span class="preprocessor"></span>}
00125
00126
00127 <span class="keyword">inline</span> PLBYTE PLPixel16::GetG()<span class="keyword"> const</span>
00128 <span class="keyword"></span>{
00129 <span class="keywordflow">return</span> (m_Data&0x07E0)>>3;
00130 }
00131
00132 <span class="keyword">inline</span> PLBYTE PLPixel16::GetB()<span class="keyword"> const</span>
00133 <span class="keyword"></span>{
00134 <span class="preprocessor">#ifdef PL_PIXEL_BGRA_ORDER</span>
00135 <span class="preprocessor"></span> <span class="keywordflow">return</span> (m_Data&0x001F)<<3;
00136 <span class="preprocessor">#else</span>
00137 <span class="preprocessor"></span> <span class="keywordflow">return</span> (m_Data&0xF800)>>8;
00138 <span class="preprocessor">#endif </span>
00139 <span class="preprocessor"></span>}
00140
00141 <span class="keyword">inline</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> PLPixel16::operator = (<span class="keyword">const</span> <a class="code" href="classPLPixel32.html">PLPixel32</a>& Pix)
00142 {
00143 m_Data = PLWORD((((*(<span class="keyword">const</span> PLLONG*)&Pix) & 0xF80000) >> 8) |
00144 (((*(<span class="keyword">const</span> PLLONG*)&Pix) & 0x00FC00) >> 5) |
00145 (((*(<span class="keyword">const</span> PLLONG*)&Pix) & 0x0000F8) >> 3));
00146
00147 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00148 }
00149
00150 <span class="keyword">inline</span> PLPixel16::operator PLPixel32 ()<span class="keyword"> const</span>
00151 <span class="keyword"></span>{
00152 <span class="comment">// TODO: Make faster.</span>
00153 <span class="keywordflow">return</span> <a class="code" href="classPLPixel32.html">PLPixel32</a> (GetR(), GetG(), GetB(), 255);
00154 }
00155
00156 <span class="keyword">inline</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> PLPixel16::operator = (<span class="keyword">const</span> <a class="code" href="classPLPixel24.html">PLPixel24</a>& Pix)
00157 {
00158 Set (Pix.<a class="code" href="classPLPixel24.html#a6">GetR</a>(), Pix.<a class="code" href="classPLPixel24.html#a7">GetG</a>(), Pix.<a class="code" href="classPLPixel24.html#a8">GetB</a>());
00159
00160 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00161 }
00162
00163 <span class="keyword">inline</span> PLPixel16::operator PLPixel24 ()<span class="keyword"> const</span>
00164 <span class="keyword"></span>{
00165 <span class="comment">// TODO: Make faster. </span>
00166 <span class="keywordflow">return</span> <a class="code" href="classPLPixel24.html">PLPixel24</a> (GetR(), GetG(), GetB());
00167 }
00168
<a name="l00169"></a><a class="code" href="classPLPixel16.html#a15">00169</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="classPLPixel16.html#a15">PLPixel16::BoxDist</a> (<span class="keyword">const</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> Pix)<span class="keyword"> const</span>
00170 <span class="keyword"></span>{
00171 <span class="keywordflow">return</span> (abs ((<span class="keywordtype">int</span>)GetR()-Pix.<a class="code" href="classPLPixel16.html#a6">GetR</a>()) +
00172 abs ((<span class="keywordtype">int</span>)GetG()-Pix.<a class="code" href="classPLPixel16.html#a7">GetG</a>()) +
00173 abs ((<span class="keywordtype">int</span>)GetB()-Pix.<a class="code" href="classPLPixel16.html#a8">GetB</a>()));
00174 }
00175
00176 <span class="keyword">inline</span> <span class="keywordtype">bool</span> PLPixel16::operator ==(<span class="keyword">const</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> Pix)<span class="keyword"> const</span>
00177 <span class="keyword"></span>{
00178 <span class="keywordflow">return</span> (*(<span class="keyword">const</span> PLWORD *)<span class="keyword">this</span> == *(<span class="keyword">const</span> PLWORD*)&Pix);
00179 }
00180
00181 <span class="keyword">inline</span> <span class="keywordtype">bool</span> PLPixel16::operator !=(<span class="keyword">const</span> <a class="code" href="classPLPixel16.html">PLPixel16</a> Pix)<span class="keyword"> const</span>
00182 <span class="keyword"></span>{
00183 <span class="keywordflow">return</span> (!(*<span class="keyword">this</span> == Pix));
00184 }
00185
00186
00187 <span class="preprocessor">#endif</span>
00188 <span class="preprocessor"></span>
00189 <span class="comment">/*</span>
00190 <span class="comment">/--------------------------------------------------------------------</span>
00191 <span class="comment">|</span>
00192 <span class="comment">| $Log: plpixel16_8h-source.html,v $
00192 <span class="comment">| Revision 1.2 2004/09/15 15:26:32 uzadow
00192 <span class="comment">| Linux compatibility changes, doc update.
00192 <span class="comment">|</span>
00193 <span class="comment">| Revision 1.3 2004/06/13 20:20:33 uzadow</span>
00194 <span class="comment">| no message</span>
00195 <span class="comment">|</span>
00196 <span class="comment">| Revision 1.2 2004/06/09 21:34:53 uzadow</span>
00197 <span class="comment">| Added 16 bpp support to plbitmap, planybmp and pldirectfbbmp</span>
00198 <span class="comment">|</span>
00199 <span class="comment">| Revision 1.1 2004/06/09 20:27:48 uzadow</span>
00200 <span class="comment">| Added 16 bpp pixel class.</span>
00201 <span class="comment">|</span>
00202 <span class="comment">|</span>
00203 <span class="comment">\--------------------------------------------------------------------</span>
00204 <span class="comment">*/</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 13 16:16:40 2004 for paintlib by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
</a>1.3.2 </small></address>
</body>
</html>
|