Point Cloud Library (PCL)
1.7.1
Main Page
Modules
Namespaces
Classes
surface
include
pcl
surface
3rdparty
opennurbs
opennurbs_bitmap.h
1
/* $NoKeywords: $ */
2
/*
3
//
4
// Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved.
5
// OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert
6
// McNeel & Associates.
7
//
8
// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
9
// ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF
10
// MERCHANTABILITY ARE HEREBY DISCLAIMED.
11
//
12
// For complete openNURBS copyright information see <http://www.opennurbs.org>.
13
//
14
////////////////////////////////////////////////////////////////
15
*/
16
17
////////////////////////////////////////////////////////////////
18
//
19
// Defines ON_WindowsBITMAPINFO class that is used to provide OS independent
20
// serialization of Windows device independent bitmaps (BITMAPINFO) used
21
// to store preview images.
22
//
23
////////////////////////////////////////////////////////////////
24
25
#if !defined(OPENNURBS_BITMAP_INC_)
26
#define OPENNURBS_BITMAP_INC_
27
28
class
ON_CLASS
ON_Bitmap
:
public
ON_Object
29
{
30
// virtual base class for bitmap objects
31
ON_OBJECT_DECLARE(
ON_Bitmap
);
32
public
:
33
ON_Bitmap
();
34
~
ON_Bitmap
();
35
36
// C++ defaults work fine
37
//ON_Bitmap(const ON_Bitmap&);
38
//ON_Bitmap& operator=(const ON_Bitmap&);
39
40
// virtual
41
ON_UUID
ModelObjectId
()
const
;
42
43
44
void
Dump
(
ON_TextLog
& )
const
;
// for debugging
45
46
void
EmergencyDestroy
();
47
void
Destroy();
48
49
void
Defaults();
50
51
virtual
52
int
Width()
const
= 0;
53
virtual
54
int
Height()
const
= 0;
// >0 means it's a bottom-up bitmap with origin at lower right
55
// <0 means it's a top-down bitmap with origin at upper left
56
virtual
57
int
BitsPerPixel()
const
= 0;
// bits per pixel
58
virtual
59
int
SizeofScan()
const
= 0;
// number of bytes per scan line
60
virtual
61
int
SizeofImage()
const
= 0;
// size of current map in bytes
62
63
virtual
64
unsigned
char
* Bits(
65
int
// index of scan line
66
) = 0;
67
virtual
68
const
unsigned
char
* Bits(
69
int
// index of scan line
70
)
const
= 0;
71
72
ON_UUID
m_bitmap_id
;
73
int
m_bitmap_index
;
74
ON_wString
m_bitmap_name
;
// descriptive name
75
ON_wString
m_bitmap_filename
;
// full path to file
76
};
77
78
/*
79
ON_EmbeddedFile is derived from ON_Bitmap so it can be stored
80
in the Rhino document's CRhinoDoc::m_bitmap_table[] array.
81
The ON_EmbeddedFile class is used to embed any type of file
82
in a Rhino document.
83
*/
84
class
ON_CLASS
ON_EmbeddedFile
:
public
ON_Object
85
{
86
ON_OBJECT_DECLARE(
ON_EmbeddedFile
);
87
public
:
88
ON_EmbeddedFile
();
89
ON_EmbeddedFile
(
const
ON_EmbeddedFile
& src);
90
ON_EmbeddedFile
&
operator=
(
const
ON_EmbeddedFile
& src);
91
92
virtual
~
ON_EmbeddedFile
();
93
void
EmergencyDestroy
();
94
void
Destroy();
95
void
DestroyBuffer();
96
97
/*
98
Description:
99
Store the specified file in an ON_EmbeddedFile class.
100
Parameters:
101
filename - [in]
102
full path to the file.
103
bCompress - [in]
104
true if the image of the file should be compressed.
105
(Pass false if the file is already in a compressed
106
format, like jpg, png, zip files.)
107
Returns:
108
true if successful. When true is returned m_id is set to
109
a new unique id, m_full_file_name is set to filename,
110
and m_relative_file_name is empty.
111
*/
112
bool
Create(
113
const
wchar_t
* filename,
114
bool
bCompress
115
);
116
117
/*
118
Description:
119
Store the specified file in an ON_EmbeddedFile class.
120
Parameters:
121
fp - [in]
122
Result of calling ON::OpenFile( ..., "rb" )
123
bCompress - [in]
124
true if the image of the file should be compressed.
125
(Pass false if the file is already in a compressed
126
format, like jpg, png, zip files.)
127
*/
128
bool
Create(
129
FILE* fp,
130
bool
bCompress
131
);
132
133
/*
134
Description:
135
Store the specified buffer in an ON_EmbeddedFile class.
136
Parameters:
137
source_buffer - [in]
138
source_buffer_size - [in]
139
number of bytes in source_buffer.
140
bCompress - [in]
141
true if the source_buffer should be compressed.
142
(Pass false if source_buffer is already in a compressed format.)
143
*/
144
bool
Create(
145
const
void
* source_buffer,
146
ON__UINT64 sizeof_source_buffer,
147
bool
bCompress
148
);
149
150
bool
Extract(
151
const
wchar_t
* destination_filename
152
)
const
;
153
154
bool
Extract(
155
FILE* fp
156
)
const
;
157
158
/*
159
Description:
160
Extracts the file into a buffer.
161
Parameters:
162
buffer - [out]
163
buffer must point to FileSize() bytes of memory.
164
The extracted file will be copied to this buffer.
165
Returns:
166
True if successful.
167
False if not successful.
168
*/
169
bool
Extract(
170
void
* buffer
171
)
const
;
172
173
/*
174
Returns
175
full path file name
176
*/
177
const
wchar_t
* FullFileName()
const
;
178
179
/*
180
Returns
181
Relative file name. Usually relative to the directory
182
where the archive containing this embedded file was last
183
saved.
184
*/
185
const
wchar_t
* RelativeFileName()
const
;
186
187
ON_UUID
Id()
const
;
188
189
void
SetId(
ON_UUID
id
);
190
191
void
SetFullFileName(
const
wchar_t
* full_file_name );
192
193
194
void
SetRelativeFileName(
const
wchar_t
* relative_file_name );
195
196
ON__UINT64 FileSize()
const
;
197
ON__UINT64 FileLastModifiedTime()
const
;
198
ON__UINT32 FileCRC()
const
;
199
200
ON_BOOL32
IsValid
(
ON_TextLog
* text_log = NULL )
const
;
201
202
ON_BOOL32
Write
(
ON_BinaryArchive
& )
const
;
203
ON_BOOL32
Read
(
ON_BinaryArchive
& );
204
205
// The relative path is typically set when the .3dm file is
206
// saved and is the path to the file relative to the location
207
// of the saved file.
208
// (The full path to the file is in ON_Bitmap::m_bitmap_filename.)
209
ON_UUID
m_id
;
210
ON_wString
m_full_file_name
;
// full path file name
211
ON_wString
m_relative_file_name
;
// relative path when the archive was last saved.
212
213
private
:
214
void
* m_reserved;
215
216
public
:
217
ON__UINT64
m_file_size
;
218
ON__UINT64
m_file_time
;
// last modified time returned by ON::GetFileStats()
219
ON__UINT32
m_file_crc
;
// 32 bit crc of the file from ON_CRC32
220
221
public
:
222
ON__UINT32
m_buffer_crc
;
// will be different from m_file_crc if the buffer is compressed.
223
ON_Buffer
m_buffer
;
224
unsigned
char
m_bCompressedBuffer
;
// true if m_buffer is compressed.
225
226
private
:
227
unsigned
char
m_reserved3[7];
228
};
229
230
231
#if !defined(ON_OS_WINDOWS_GDI)
232
233
// These are the values of the Windows defines mentioned
234
// in the comment below. If you're running on Windows,
235
// they get defined by Windows system header files.
236
// If you aren't running on Windows, then you don't
237
// need them.
238
//#define BI_RGB 0L
239
//#define BI_RLE8 1L
240
//#define BI_RLE4 2L
241
//#define BI_BITFIELDS 3L
242
243
// Mimics Windows BITMAPINFOHEADER structure.
244
// For details searh for "BITMAPINFOHEADER" at http://msdn.microsoft.com/default.asp
245
struct
ON_WindowsBITMAPINFOHEADER
246
{
247
unsigned
int
biSize
;
// DWORD = sizeof(BITMAPINFOHEADER)
248
int
biWidth
;
// LONG = width (in pixels) of (decompressed) bitmap
249
int
biHeight
;
// LONG = height (in pixels) of (decompressed) bitmap
250
// >0 means it's a bottom-up bitmap with origin
251
// in the lower left corner.
252
// <0 means it's a top-down bitmap with origin
253
// in the upper left corner.
254
unsigned
short
biPlanes
;
// WORD = number of planes
255
// (always 1 in current Windows versions)
256
unsigned
short
biBitCount
;
// WORD = bits per pixel (0,1,4,8,16,24,32 are valid)
257
// 1 See http://msdn.microsoft.com/default.asp
258
// 4 See http://msdn.microsoft.com/default.asp
259
// 8 The bitmap has a maximum of 256 colors,
260
// and the bmiColors member contains up
261
// to 256 entries. In this case, each byte
262
// in the array represents a single pixel.
263
// 16 See http://msdn.microsoft.com/default.asp
264
// 24 If biClrUsed=0 and biCompression=BI_RGB(0),
265
// then each 3-byte triplet in the bitmap
266
// array represents the relative intensities
267
// of blue, green, and red, respectively, for
268
// a pixel. For other possibilities, see
269
// http://msdn.microsoft.com/default.asp
270
// 32 If biClrUsed=0 and biCompression=BI_RGB(0),
271
// then each 4-byte DWORD in the bitmap
272
// array represents the relative intensities
273
// of blue, green, and red, respectively, for
274
// a pixel. The high byte in each DWORD is not
275
// used.
276
// If biClrUsed=3, biCompression=BITFIELDS(3),
277
// biColors[0] = red mask (0x00FF0000),
278
// biColors[1] = green mask (0x0000FF00), and
279
// biColors[2] = blue mask (0x000000FF),
280
// then tese masks are used with each 4-byte
281
// DWORD in the bitmap array to determine
282
// the pixel's relative intensities. //
283
// For other possibilities, see
284
// http://msdn.microsoft.com/default.asp
285
unsigned
int
biCompression
;
// DWORD Currently, Windows defines the following
286
// types of compression.
287
// =0 BI_RGB (no compression)
288
// =1 BI_RLE8 (run length encoded used for 8 bpp)
289
// =2 BI_RLE4 (run length encoded used for 4 bpp)
290
// =3 BI_BITFIELDS Specifies that the bitmap is
291
// not compressed and that the color table
292
// consists of three DWORD color masks that
293
// specify the red, green, and blue components,
294
// respectively, of each pixel. This is valid
295
// when used with 16- and 32-bit-per-pixel
296
// bitmaps.
297
// =4 BI_JPEG (not supported in Win 95/NT4)
298
//
299
unsigned
int
biSizeImage
;
// DWORD = bytes in image
300
int
biXPelsPerMeter
;
// LONG
301
int
biYPelsPerMeter
;
// LONG
302
unsigned
int
biClrUsed
;
// DWORD = 0 or true length of bmiColors[] array. If 0,
303
// then the value of biBitCount determines the
304
// length of the bmiColors[] array.
305
unsigned
int
biClrImportant
;
// DWORD
306
};
307
308
struct
ON_WindowsRGBQUAD
{
309
// Mimics Windows RGBQUAD structure.
310
// For details searh for "RGBQUAD" at http://msdn.microsoft.com/default.asp
311
unsigned
char
rgbBlue
;
// BYTE
312
unsigned
char
rgbGreen
;
// BYTE
313
unsigned
char
rgbRed
;
// BYTE
314
unsigned
char
rgbReserved
;
// BYTE
315
};
316
317
struct
ON_WindowsBITMAPINFO
318
{
319
// Mimics Windows BITMAPINFO structure.
320
// For details searh for "BITMAPINFO" at http://msdn.microsoft.com/default.asp
321
ON_WindowsBITMAPINFOHEADER
bmiHeader
;
322
ON_WindowsRGBQUAD
bmiColors
[1];
// The "[1]" is for the compiler. In
323
// practice this array commonly has
324
// length 0, 3, or 256 and a BITMAPINFO*
325
// points to a contiguous piece of memory
326
// that contains
327
//
328
// BITMAPINFOHEADER
329
// RGBQUAD[length determined by flags]
330
// unsigned char[biSizeImage]
331
//
332
// See the ON_WindowsBITMAPINFOHEADER comments
333
// and http://msdn.microsoft.com/default.asp
334
// for more details.
335
};
336
337
#endif
338
339
// OBSOLETE // class ON_OpenGLBitmap;
340
341
class
ON_CLASS
ON_WindowsBitmap
:
public
ON_Bitmap
342
{
343
ON_OBJECT_DECLARE(
ON_WindowsBitmap
);
344
// Uncompressed 8 bpp, 24 bpp, or 32 bpp Windows device
345
// independent bitmaps (DIB)
346
public
:
347
348
ON_WindowsBitmap
();
349
ON_WindowsBitmap
(
const
ON_WindowsBitmap
& );
350
~
ON_WindowsBitmap
();
351
352
ON_WindowsBitmap
&
operator=
(
const
ON_WindowsBitmap
& );
353
354
void
EmergencyDestroy
();
355
void
Destroy
();
356
357
bool
Create(
358
int
,
// width
359
int
,
// height
360
int
// bits per pixel ( 1, 2, 4, 8, 16, 24, or 32 )
361
);
362
363
/*
364
Description:
365
Tests an object to see if its data members are correctly
366
initialized.
367
Parameters:
368
text_log - [in] if the object is not valid and text_log
369
is not NULL, then a brief englis description of the
370
reason the object is not valid is appened to the log.
371
The information appended to text_log is suitable for
372
low-level debugging purposes by programmers and is
373
not intended to be useful as a high level user
374
interface tool.
375
Returns:
376
@untitled table
377
true object is valid
378
false object is invalid, uninitialized, etc.
379
Remarks:
380
Overrides virtual ON_Object::IsValid
381
*/
382
ON_BOOL32
IsValid
(
ON_TextLog
* text_log = NULL )
const
;
383
384
ON_BOOL32
Write
(
ON_BinaryArchive
& )
const
;
// writes compressed image
385
ON_BOOL32
Read
(
ON_BinaryArchive
& );
// reads compressed image
386
bool
WriteCompressed(
ON_BinaryArchive
& )
const
;
387
bool
ReadCompressed(
ON_BinaryArchive
& );
388
bool
WriteUncompressed(
ON_BinaryArchive
& )
const
;
389
bool
ReadUncompressed(
ON_BinaryArchive
& );
390
391
int
Width
()
const
;
392
int
Height
()
const
;
// >0 means it's a bottom-up bitmap with origin at lower right
393
// <0 means it's a top-down bitmap with origin at upper left
394
395
int
PaletteColorCount()
const
;
// number of colors in palette
396
int
SizeofPalette()
const
;
// number of bytes in palette
397
int
BitsPerPixel
()
const
;
398
//int SizeofPixel() const; // number of bytes per pixel
399
int
SizeofScan
()
const
;
// number of bytes per scan line
400
int
SizeofImage
()
const
;
// number of bytes in image
401
402
unsigned
char
*
Bits
(
403
int
// index of scan line
404
);
405
const
unsigned
char
*
Bits
(
406
int
// index of scan line
407
)
const
;
408
409
//int PaletteIndex( ON_Color ) const; // for 8bpp bitmaps
410
411
ON_Color
Pixel(
412
int
,
// 0 <= i < width
413
int
// 0 <= j < height
414
)
const
;
415
ON_Color
Pixel(
416
int
,
// 0 <= i < width
417
const
unsigned
char
*
// value of Bits( j )
418
)
const
;
419
420
//ON_BOOL32 SetColor( // sets entire map to specified color
421
// ON_Color
422
// );
423
424
#if defined(ON_OS_WINDOWS_GDI)
425
426
/*
427
Description:
428
Create an ON_WindowsBitmap from a contiguous bitmap.
429
Copies src.
430
Parameters:
431
src - [in] contiguous Windows device independent bitmap.
432
Remarks:
433
If the current Windows BITMAPINFO is identical to ON_WindowsBITMAPINFO,
434
then the result of this call is identical to
435
436
int color_count = number of colors in bitmap's palette;
437
ON_WindowsBitmap::Create( &src, &src.bmiColors[color_count], true ).
438
439
See Also:
440
ON_WindowsBitmap::Create
441
*/
442
ON_WindowsBitmap
(
const
BITMAPINFO& src );
443
444
/*
445
Description:
446
Create an ON_WindowsBitmap from a contiguous bitmap.
447
Shares bitmap memory with src.
448
Parameters:
449
src - [in] contiguous Windows device independent bitmap.
450
See Also:
451
ON_WindowsBitmap::Create
452
Remarks:
453
~ON_WindowsBitmap will not delete src.
454
*/
455
ON_WindowsBitmap
(
const
BITMAPINFO* src );
456
457
/*
458
Description:
459
Create an ON_WindowsBitmap from a contiguous bitmap.
460
Copies src.
461
Parameters:
462
src - [in] contiguous Windows device independent bitmap.
463
See Also:
464
ON_WindowsBitmap::Create
465
*/
466
ON_WindowsBitmap
&
operator=
(
const
BITMAPINFO& src );
467
468
/*
469
Description:
470
Create and ON_WindowsBitmap from a Windows BITMAPINFO pointer
471
and a pointer to the bits.
472
473
This is intended to make it easy to write compressed bimaps.
474
For ON_WindowsBitmap classes created with ON_WindowsBitmap::Share,
475
ON_WindowsBitmap::Destroy and ~ON_WindowsBitmap will
476
not free the bmi and bits memory.
477
478
Parameters:
479
bmi - [in] valid BITMAPINFO
480
bits - [in] bits for BITMAPINFO
481
bCopy - [in] If true, the bmi and bits are copied into a contiguous
482
bitmap that will be deleted by ~ON_WindowsBitmap.
483
If false, the m_bmi and m_bits pointers on this class
484
are simply set to bmi and bits. In this case,
485
~ON_WindowsBitmap will not free the bmi or bits
486
memory.
487
488
Example:
489
490
ON_BinaryArchive archive = ...;
491
BITMAPINFO* bmi = 0;
492
unsigned char* bits = 0;
493
int color_count = ...; // number of colors in palette
494
495
int sizeof_palette = sizeof(bmi->bmiColors[0]) * color_count;
496
497
BITMAPINFO* bmi = (LPBITMAPINFO)calloc( 1, sizeof(*bmi) + sizeof_palette );
498
499
bmi->bmiHeader.biSize = sizeof(bmi->bmiHeader);
500
bmi->bmiHeader.biWidth = width;
501
bmi->bmiHeader.biHeight = height;
502
bmi->bmiHeader.biPlanes = 1;
503
bmi->bmiHeader.biBitCount = (USHORT)color_depth;
504
bmi->bmiHeader.biCompression = BI_RGB;
505
bmi->bmiHeader.biXPelsPerMeter = 0;
506
bmi->bmiHeader.biYPelsPerMeter = 0;
507
bmi->bmiHeader.biClrUsed = 0;
508
bmi->bmiHeader.biClrImportant = 0;
509
bmi->bmiHeader.biSizeImage = GetStorageSize();
510
511
// initialize palette
512
...
513
514
HBITMAP hbm = ::CreateDIBSection( NULL, bmi, ..., (LPVOID*)&bits, NULL, 0);
515
516
{
517
// Use ON_WindowsBitmap to write a compressed bitmap to
518
// archive. Does not modify bmi or bits.
519
ON_WindowsBitmap onbm;
520
onbm.Create(bmi,bit,false);
521
onbm.Write( arcive );
522
}
523
524
*/
525
bool
Create(
const
BITMAPINFO* bmi,
526
const
unsigned
char
* bits,
527
bool
bCopy
528
);
529
530
#endif
531
532
/*
533
Returns:
534
True if m_bmi and m_bits are in a single contiguous
535
block of memory.
536
False if m_bmi and m_bits are in two blocks of memory.
537
*/
538
bool
IsContiguous()
const
;
539
540
#if defined(ON_OS_WINDOWS_GDI)
541
BITMAPINFO* m_bmi;
542
#else
543
struct
ON_WindowsBITMAPINFO
*
m_bmi
;
544
#endif
545
546
unsigned
char
*
m_bits
;
547
548
private
:
549
int
m_bFreeBMI;
// 0 m_bmi and m_bits are not freed by ON_WindowsBitmap::Destroy
550
// 1 m_bmi memory is freed by ON_WindowsBitmap::Destroy
551
// 2 m_bits memory is freed by ON_WindowsBitmap::Destroy
552
// 3 m_bmi and m_bits memory is freed by ON_WindowsBitmap::Destroy
553
};
554
555
/*
556
Description:
557
ON_WindowsBitmapEx is identical to ON_WindowsBitmap except that
558
it's Read/Write functions save bitmap names.
559
*/
560
class
ON_CLASS
ON_WindowsBitmapEx
:
public
ON_WindowsBitmap
561
{
562
ON_OBJECT_DECLARE(
ON_WindowsBitmapEx
);
563
public
:
564
ON_WindowsBitmapEx
();
565
~
ON_WindowsBitmapEx
();
566
ON_BOOL32
Write
(
ON_BinaryArchive
& )
const
;
// writes compressed image
567
ON_BOOL32
Read
(
ON_BinaryArchive
& );
// reads compressed image
568
};
569
570
class
ON_CLASS
ON_EmbeddedBitmap
:
public
ON_Bitmap
571
{
572
ON_OBJECT_DECLARE(
ON_EmbeddedBitmap
);
573
public
:
574
ON_EmbeddedBitmap
();
575
~
ON_EmbeddedBitmap
();
576
void
EmergencyDestroy
();
577
void
Destroy
();
578
void
Create(
int
sizeof_buffer );
579
580
ON_BOOL32
IsValid
(
ON_TextLog
* text_log = NULL )
const
;
581
582
ON_BOOL32
Write
(
ON_BinaryArchive
& )
const
;
583
ON_BOOL32
Read
(
ON_BinaryArchive
& );
584
585
int
Width
()
const
;
586
int
Height
()
const
;
587
int
BitsPerPixel
()
const
;
588
int
SizeofScan
()
const
;
589
int
SizeofImage
()
const
;
590
unsigned
char
*
Bits
(
int
);
591
const
unsigned
char
*
Bits
(
int
)
const
;
592
593
void
*
m_buffer
;
594
size_t
m_sizeof_buffer
;
595
int
m_free_buffer
;
// 1 = ~ON_EmbeddedBitmap will onfree m_buffer.
596
ON__UINT32
m_biffer_crc32
;
// 32 bit crc from ON_CRC32
597
};
598
599
600
#endif