Added write-support for tiled images. Aligned every strip (tile) of the image data.

This commit is contained in:
Andreas Huggel
2008-08-17 15:55:18 +00:00
parent 02c24f4a2d
commit 533b3d224a
3 changed files with 20 additions and 7 deletions
+8 -5
View File
@@ -906,8 +906,8 @@ namespace Exiv2 {
for (Strips::const_iterator i = strips_.begin(); i != strips_.end(); ++i) {
idx += writeOffset(buf.pData_ + idx, imageIdx, tiffType(), byteOrder);
imageIdx += i->second;
imageIdx += i->second & 1; // Align strip data to word boundary
}
imageIdx += sizeImage() & 1; // Align image data to word boundary
append(blob, buf.pData_, buf.size_);
return buf.size_;
} // TiffImageEntry::doWrite
@@ -1122,9 +1122,6 @@ namespace Exiv2 {
if (blob.capacity() - size < sz) {
blob.reserve(size + sz + 65536);
}
// Align image data to word boundary
uint32_t align = (blob.size() & 1);
if (align) blob.push_back(0x0);
uint32_t len = pValue()->sizeDataArea();
if (len > 0) {
@@ -1135,6 +1132,9 @@ namespace Exiv2 {
#endif
DataBuf buf = pValue()->dataArea();
append(blob, buf.pData_, buf.size_);
uint32_t align = len & 1; // Align image data to word boundary
if (align) blob.push_back(0x0);
len += align;
}
else {
#ifdef DEBUG
@@ -1146,12 +1146,15 @@ namespace Exiv2 {
for (Strips::const_iterator i = strips_.begin(); i != strips_.end(); ++i) {
append(blob, i->first, i->second);
len += i->second;
uint32_t align = i->second & 1; // Align strip data to word boundary
if (align) blob.push_back(0x0);
len += align;
}
}
#ifdef DEBUG
std::cerr << ", len = " << len << " bytes\n";
#endif
return len + align;
return len;
} // TiffImageEntry::doWriteImage
uint32_t TiffComponent::size() const
+10
View File
@@ -288,6 +288,8 @@ namespace Exiv2 {
{ 0x8825, Group::ifd0, Group::gps, Tag::root, Group::none, newTiffSubIfd },
{ 0x0111, Group::ifd0, Group::ifd0, Tag::root, Group::none, newTiffImageData<0x0117, Group::ifd0> },
{ 0x0117, Group::ifd0, Group::ifd0, Tag::root, Group::none, newTiffImageSize<0x0111, Group::ifd0> },
{ 0x0144, Group::ifd0, Group::ifd0, Tag::root, Group::none, newTiffImageData<0x0145, Group::ifd0> },
{ 0x0145, Group::ifd0, Group::ifd0, Tag::root, Group::none, newTiffImageSize<0x0144, Group::ifd0> },
{ 0x0201, Group::ifd0, Group::ifd0, Tag::root, Group::ifd0, newTiffImageData<0x0202, Group::ifd0> },
{ 0x0202, Group::ifd0, Group::ifd0, Tag::root, Group::ifd0, newTiffImageSize<0x0201, Group::ifd0> },
{ 0x014a, Group::ifd0, Group::subimg1, Tag::root, Group::none, newTiffSubIfd },
@@ -297,6 +299,8 @@ namespace Exiv2 {
// Subdir subimg1
{ 0x0111, Group::subimg1, Group::subimg1, 0x014a, Group::ifd0, newTiffImageData<0x0117, Group::subimg1> },
{ 0x0117, Group::subimg1, Group::subimg1, 0x014a, Group::ifd0, newTiffImageSize<0x0111, Group::subimg1> },
{ 0x0144, Group::subimg1, Group::subimg1, 0x014a, Group::ifd0, newTiffImageData<0x0145, Group::subimg1> },
{ 0x0145, Group::subimg1, Group::subimg1, 0x014a, Group::ifd0, newTiffImageSize<0x0144, Group::subimg1> },
{ 0x0201, Group::subimg1, Group::subimg1, 0x014a, Group::ifd0, newTiffImageData<0x0202, Group::subimg1> },
{ 0x0202, Group::subimg1, Group::subimg1, 0x014a, Group::ifd0, newTiffImageSize<0x0201, Group::subimg1> },
{ Tag::next, Group::subimg1, Group::ignr, 0x014a, Group::ifd0, newTiffDirectory },
@@ -305,6 +309,8 @@ namespace Exiv2 {
// Subdir subimg2
{ 0x0111, Group::subimg2, Group::subimg2, 0x014a, Group::ifd0, newTiffImageData<0x0117, Group::subimg2> },
{ 0x0117, Group::subimg2, Group::subimg2, 0x014a, Group::ifd0, newTiffImageSize<0x0111, Group::subimg2> },
{ 0x0144, Group::subimg2, Group::subimg2, 0x014a, Group::ifd0, newTiffImageData<0x0145, Group::subimg2> },
{ 0x0145, Group::subimg2, Group::subimg2, 0x014a, Group::ifd0, newTiffImageSize<0x0144, Group::subimg2> },
{ 0x0201, Group::subimg2, Group::subimg2, 0x014a, Group::ifd0, newTiffImageData<0x0202, Group::subimg2> },
{ 0x0202, Group::subimg2, Group::subimg2, 0x014a, Group::ifd0, newTiffImageSize<0x0201, Group::subimg2> },
{ Tag::next, Group::subimg2, Group::ignr, 0x014a, Group::ifd0, newTiffDirectory },
@@ -313,6 +319,8 @@ namespace Exiv2 {
// Subdir subimg3
{ 0x0111, Group::subimg3, Group::subimg3, 0x014a, Group::ifd0, newTiffImageData<0x0117, Group::subimg3> },
{ 0x0117, Group::subimg3, Group::subimg3, 0x014a, Group::ifd0, newTiffImageSize<0x0111, Group::subimg3> },
{ 0x0144, Group::subimg3, Group::subimg3, 0x014a, Group::ifd0, newTiffImageData<0x0145, Group::subimg3> },
{ 0x0145, Group::subimg3, Group::subimg3, 0x014a, Group::ifd0, newTiffImageSize<0x0144, Group::subimg3> },
{ 0x0201, Group::subimg3, Group::subimg3, 0x014a, Group::ifd0, newTiffImageData<0x0202, Group::subimg3> },
{ 0x0202, Group::subimg3, Group::subimg3, 0x014a, Group::ifd0, newTiffImageSize<0x0201, Group::subimg3> },
{ Tag::next, Group::subimg3, Group::ignr, 0x014a, Group::ifd0, newTiffDirectory },
@@ -321,6 +329,8 @@ namespace Exiv2 {
// Subdir subimg4
{ 0x0111, Group::subimg4, Group::subimg4, 0x014a, Group::ifd0, newTiffImageData<0x0117, Group::subimg4> },
{ 0x0117, Group::subimg4, Group::subimg4, 0x014a, Group::ifd0, newTiffImageSize<0x0111, Group::subimg4> },
{ 0x0144, Group::subimg4, Group::subimg4, 0x014a, Group::ifd0, newTiffImageData<0x0145, Group::subimg4> },
{ 0x0145, Group::subimg4, Group::subimg4, 0x014a, Group::ifd0, newTiffImageSize<0x0144, Group::subimg4> },
{ 0x0201, Group::subimg4, Group::subimg4, 0x014a, Group::ifd0, newTiffImageData<0x0202, Group::subimg4> },
{ 0x0202, Group::subimg4, Group::subimg4, 0x014a, Group::ifd0, newTiffImageSize<0x0201, Group::subimg4> },
{ Tag::next, Group::subimg4, Group::ignr, 0x014a, Group::ifd0, newTiffDirectory },
+2 -2
View File
@@ -88,7 +88,7 @@ Exif.Image.ResolutionUnit 0x0128 Short 1 2
Exif.Photo.DateTimeOriginal 0x9003 Ascii 18 Yesterday at noon
File Name = mini9.tif
File Type = TIFF:II
File Size = 573
File Size = 574
@000000000=0 : TIFF(II=0x4949) magic=0x002a='*\0' ifd offset = 0x8/8
@0x0000008=8 : <IFD 0> 18 entries starting at file offset 0xa=10
@0x000000a=10 : <0x00fe= 254> NewSubFileType [4 =LONG 1] = 0 = 'primary'
@@ -129,7 +129,7 @@ File Size = 573
0x000016a=362 : 00 00 ff 00 3f 7f bf 3f 7f bf 3f 7f bf 00 ff 00 |....?..?..?.....|
0x000017a=378 : 00 ff 00 00 ff 00 00 00 ff 00 00 ff 3f 7f bf ff |............?...| etc...
@0x000023c=572 : </=-=-=> End of image data
-0x000023c=572 : END OF FILE
-0x000023d=573 : END OF FILE
@0x000014a=330 : Start of TIFF RGB uncompressed primary image [9x9] length 243 (IFD 0)
-0x000023c=572 : End of TIFF primary image data
Number of images = 1