Magick++
7.1.2-29
Convert, Edit, Or Compose Bitmap Images
Toggle main menu visibility
Loading...
Searching...
No Matches
readWriteBlob.cpp
1
// This may look like C code, but it is really -*- C++ -*-
2
//
3
// Copyright Bob Friesenhahn, 1999, 2000, 2003
4
//
5
// Test reading/writing BLOBs using Magick++
6
//
7
8
#include <Magick++.h>
9
#include <string>
10
#include <iostream>
11
#include <fstream>
12
13
#if defined(MISSING_STD_IOS_BINARY)
14
# define IOS_IN_BINARY ios::in
15
#else
16
# define IOS_IN_BINARY ios::in | ios::binary
17
#endif
18
19
using namespace
std;
20
21
using namespace
Magick;
22
23
// A derived Blob class to exercise updateNoCopy()
24
class
myBlob :
public
Blob
25
{
26
public
:
27
// Construct from open binary stream
28
myBlob( ifstream &stream_ )
29
: Blob()
30
{
31
unsigned
char
* blobData =
new
unsigned
char
[100000];
32
char
* c=
reinterpret_cast<
char
*
>
(blobData);
33
size_t
blobLen=0;
34
while
( (blobLen< 100000) && stream_.get(*c) )
35
{
36
c++;
37
blobLen++;
38
}
39
if
((!stream_.eof()) || (blobLen == 0))
40
{
41
cout <<
"Failed to stream into blob!"
<< endl;
42
exit(1);
43
}
44
45
// Insert data into blob
46
updateNoCopy(
reinterpret_cast<
unsigned
char
*
>
(blobData), blobLen,
47
Blob::NewAllocator );
48
}
49
};
50
51
52
int
main(
int
/*argc*/
,
char
** argv)
53
{
54
55
// Initialize ImageMagick install location for Windows
56
MagickPlusPlusGenesis
genesis(*argv);
57
58
int
failures=0;
59
60
try
61
{
62
string
srcdir(
""
);
63
if
(getenv(
"SRCDIR"
) != 0)
64
srcdir = getenv(
"SRCDIR"
);
65
66
string
testimage;
67
68
//
69
// Test reading BLOBs
70
//
71
{
72
string
signature(
""
);
73
{
74
Image
image(srcdir +
"test_image.miff"
);
75
signature = image.signature();
76
}
77
78
// Read raw data from file into BLOB
79
testimage = srcdir +
"test_image.miff"
;
80
ifstream in( testimage.c_str(), ios::in | IOS_IN_BINARY );
81
if
( !in )
82
{
83
cout <<
"Failed to open file "
<< testimage <<
" for input!"
<< endl;
84
exit(1);
85
}
86
unsigned
char
* blobData =
new
unsigned
char
[100000];
87
char
* c=
reinterpret_cast<
char
*
>
(blobData);
88
size_t
blobLen=0;
89
while
( (blobLen< 100000) && in.get(*c) )
90
{
91
c++;
92
blobLen++;
93
}
94
if
((!in.eof()) || (blobLen == 0))
95
{
96
cout <<
"Failed to read file "
<< testimage <<
" for input!"
<< endl;
97
exit(1);
98
}
99
in.close();
100
101
// Construct Magick++ Blob
102
Blob
blob(
static_cast<
const
unsigned
char
*
>
(blobData), blobLen);
103
delete
[] blobData;
104
105
// If construction of image fails, an exception should be thrown
106
{
107
// Construct with blob data only
108
Image
image( blob );
109
if
( image.signature() != signature )
110
{
111
++failures;
112
cout <<
"Line: "
<< __LINE__
113
<<
" Image signature "
114
<< image.signature()
115
<<
" != "
116
<< signature << endl;
117
}
118
}
119
120
{
121
// Construct with image geometry and blob data
122
Image
image( blob,
Geometry
(148,99));
123
if
( image.signature() != signature )
124
{
125
++failures;
126
cout <<
"Line: "
<< __LINE__
127
<<
" Image signature "
128
<< image.signature()
129
<<
" != "
130
<< signature << endl;
131
}
132
}
133
134
{
135
// Construct default image, and then read in blob data
136
Image
image;
137
image.read( blob );
138
if
( image.signature() != signature )
139
{
140
++failures;
141
cout <<
"Line: "
<< __LINE__
142
<<
" Image signature "
143
<< image.signature()
144
<<
" != "
145
<< signature << endl;
146
}
147
}
148
149
{
150
// Construct default image, and then read in blob data with
151
// image geometry
152
Image
image;
153
image.read( blob,
Geometry
(148,99) );
154
if
( image.signature() != signature )
155
{
156
++failures;
157
cout <<
"Line: "
<< __LINE__
158
<<
" Image signature "
159
<< image.signature()
160
<<
" != "
161
<< signature << endl;
162
}
163
}
164
165
}
166
167
// Test writing BLOBs
168
{
169
Blob
blob;
170
string
signature(
""
);
171
{
172
Image
image(srcdir +
"test_image.miff"
);
173
image.magick(
"MIFF"
);
174
image.write( &blob );
175
signature = image.signature();
176
}
177
{
178
Image
image(blob);
179
if
( image.signature() != signature )
180
{
181
++failures;
182
cout <<
"Line: "
<< __LINE__
183
<<
" Image signature "
184
<< image.signature()
185
<<
" != "
186
<< signature << endl;
187
image.display();
188
}
189
}
190
191
}
192
// Test writing BLOBs via STL writeImages
193
{
194
Blob
blob;
195
196
list<Image> first;
197
readImages( &first, srcdir +
"test_image_anim.miff"
);
198
writeImages( first.begin(), first.end(), &blob,
true
);
199
}
200
201
// Test constructing a BLOB from a derived class
202
{
203
204
string
signature(
""
);
205
{
206
Image
image(srcdir +
"test_image.miff"
);
207
signature = image.signature();
208
}
209
210
// Read raw data from file into BLOB
211
testimage = srcdir +
"test_image.miff"
;
212
ifstream in( testimage.c_str(), ios::in | IOS_IN_BINARY );
213
if
( !in )
214
{
215
cout <<
"Failed to open file for input!"
<< endl;
216
exit(1);
217
}
218
219
myBlob
blob( in );
220
in.close();
221
222
Image
image( blob );
223
if
( image.signature() != signature )
224
{
225
++failures;
226
cout <<
"Line: "
<< __LINE__
227
<<
" Image signature "
228
<< image.signature()
229
<<
" != "
230
<< signature << endl;
231
}
232
}
233
}
234
235
catch
(
Exception
&error_ )
236
{
237
cout <<
"Caught exception: "
<< error_.what() << endl;
238
return
1;
239
}
240
catch
( exception &error_ )
241
{
242
cout <<
"Caught exception: "
<< error_.what() << endl;
243
return
1;
244
}
245
246
if
( failures )
247
{
248
cout << failures <<
" failures"
<< endl;
249
return
1;
250
}
251
252
return
0;
253
}
254
255
Magick::Blob
Definition
Blob.h:23
Magick::Exception
Definition
Exception.h:25
Magick::Geometry
Definition
Geometry.h:38
Magick::Image
Definition
Image.h:56
Magick::MagickPlusPlusGenesis
Definition
Functions.h:44
myBlob
Definition
readWriteBlob.cpp:25
Magick++
tests
readWriteBlob.cpp
Generated by
1.17.0