private byte[] assembleSegments(ArrayList v, boolean start_with_zero)
throws ImageReadException
{
if (v.size() < 1)
throw new ImageReadException("No App2 Segments Found.");
int markerCount = ((App2Segment) v.get(0)).num_markers;
// if (permissive && (markerCount == 0))
// markerCount = v.size();
if (v.size() != markerCount)
throw new ImageReadException("App2 Segments Missing. Found: "
+ v.size() + ", Expected: " + markerCount + ".");
Collections.sort(v);
int offset = start_with_zero ? 0 : 1;
int total = 0;
for (int i = 0; i < v.size(); i++)
{
App2Segment segment = (App2Segment) v.get(i);
if ((i + offset) != segment.cur_marker)
{
dumpSegments(v);
throw new ImageReadException(
"Incoherent App2 Segment Ordering. i: " + i
+ ", segment[" + i + "].cur_marker: "
+ segment.cur_marker + ".");
}
if (markerCount != segment.num_markers)
{
dumpSegments(v);
throw new ImageReadException(
"Inconsistent App2 Segment Count info. markerCount: "
+ markerCount + ", segment[" + i
+ "].num_markers: " + segment.num_markers + ".");
}