void PSDUtilsTest::test_psdread_pascalstring() { QBuffer buf; QString s; QString r; // test null string buf.open(QBuffer::ReadWrite); QVERIFY(psdwrite_pascalstring(&buf, s)); buf.close(); buf.open(QBuffer::ReadOnly); psdread_pascalstring(&buf, r, 2); QCOMPARE(r, s); QVERIFY(buf.bytesAvailable() == 0); // test even string buf.close(); buf.buffer().clear(); r.clear(); buf.open(QBuffer::ReadWrite); s = QString("bl"); QVERIFY(psdwrite_pascalstring(&buf, s)); buf.close(); buf.open(QBuffer::ReadOnly); psdread_pascalstring(&buf, r, 1); QCOMPARE(r, s); QVERIFY(buf.bytesAvailable() == 0); // test uneven string buf.close(); buf.buffer().clear(); r.clear(); buf.open(QBuffer::ReadWrite); s = QString("bla"); QVERIFY(psdwrite_pascalstring(&buf, s, 2)); buf.close(); buf.open(QBuffer::ReadOnly); psdread_pascalstring(&buf, r, 2); QCOMPARE(r, s); dbgKrita << buf.bytesAvailable(); QVERIFY(buf.bytesAvailable() == 0); }
bool PSDResourceBlock::read(QIODevice* io) { dbgFile << "Reading resource block"; if (io->atEnd()) { error = "Could not read resource block: no bytes left."; return false; } QByteArray b; b = io->read(4); if(b.size() != 4 || QString(b) != "8BIM") { error = QString("Could not read resource block signature. Got %1.") .arg(QString(b)); return false; } if (!psdread(io, &identifier)) { error = "Could not read resource block identifier"; return false; } dbgFile << "\tresource block identifier" << PSDImageResourceSection::idToString((PSDImageResourceSection::PSDResourceID)identifier) << identifier; m_type = QString("PSD Resource Block: %1").arg(identifier); if (!psdread_pascalstring(io, name, 2)) { error = "Could not read name of resource block"; return false; } dbgFile << "\tresource block name" << name; if (!psdread(io, &dataSize)) { error = QString("Could not read datasize for resource block with name %1 of type %2").arg(name).arg(identifier); return false; } if ((dataSize & 0x01) != 0) { dataSize++; } dbgFile << "\tresource block size" << dataSize; m_description = PSDImageResourceSection::idToString((PSDImageResourceSection::PSDResourceID)identifier); data = io->read(dataSize); if (data.size() != (int)dataSize) { error = QString("Could not read data for resource block with name %1 of type %2").arg(name).arg(identifier); return false; } m_annotation = data; switch (identifier) { // case PSDImageResourceSection::MAC_PRINT_INFO: // resource = new MAC_PRINT_INFO_1001; // break; case PSDImageResourceSection::RESN_INFO: resource = new RESN_INFO_1005; break; // case PSDImageResourceSection::ALPHA_NAMES: // resource = new ALPHA_NAMES_1006; // break; // case PSDImageResourceSection::DISPLAY_INFO: // resource = new DISPLAY_INFO_1007; // break; // case PSDImageResourceSection::CAPTION: // resource = new CAPTION_1008; // break; // case PSDImageResourceSection::BORDER_INFO: // resource = new BORDER_INFO_1009; // break; // case PSDImageResourceSection::BACKGROUND_COL: // resource = new BACKGROUND_COL_1010; // break; // case PSDImageResourceSection::PRINT_FLAGS: // resource = new PRINT_FLAGS_1011; // break; // case PSDImageResourceSection::GREY_HALFTONE: // resource = new GREY_HALFTONE_1012; // break; // case PSDImageResourceSection::COLOR_HALFTONE: // resource = new COLOR_HALFTONE_1013; // break; // case PSDImageResourceSection::DUOTONE_HALFTONE: // resource = new DUOTONE_HALFTONE_1014; // break; // case PSDImageResourceSection::GREY_XFER: // resource = new GREY_XFER_1015; // break; // case PSDImageResourceSection::COLOR_XFER: // resource = new COLOR_XFER_1016; // break; // case PSDImageResourceSection::DUOTONE_XFER: // resource = new DUOTONE_XFER_1017; // break; // case PSDImageResourceSection::DUOTONE_INFO: // resource = new DUOTONE_INFO_1018; // break; // case PSDImageResourceSection::EFFECTIVE_BW: // resource = new EFFECTIVE_BW_1019; // break; // case PSDImageResourceSection::EPS_OPT: // resource = new EPS_OPT_1021; // break; // case PSDImageResourceSection::QUICK_MASK: // resource = new QUICK_MASK_1022; // break; // case PSDImageResourceSection::LAYER_STATE: // resource = new LAYER_STATE_1024; // break; // case PSDImageResourceSection::WORKING_PATH: // resource = new WORKING_PATH_1025; // break; // case PSDImageResourceSection::LAYER_GROUP: // resource = new LAYER_GROUP_1026; // break; // case PSDImageResourceSection::IPTC_NAA_DATA: // resource = new IPTC_NAA_DATA_1028; // break; // case PSDImageResourceSection::IMAGE_MODE_RAW: // resource = new IMAGE_MODE_RAW_1029; // break; // case PSDImageResourceSection::JPEG_QUAL: // resource = new JPEG_QUAL_1030; // break; // case PSDImageResourceSection::GRID_GUIDE: // resource = new GRID_GUIDE_1032; // break; // case PSDImageResourceSection::THUMB_RES: // resource = new THUMB_RES_1033; // break; // case PSDImageResourceSection::COPYRIGHT_FLG: // resource = new COPYRIGHT_FLG_1034; // break; // case PSDImageResourceSection::URL: // resource = new URL_1035; // break; // case PSDImageResourceSection::THUMB_RES2: // resource = new THUMB_RES2_1036; // break; case PSDImageResourceSection::GLOBAL_ANGLE: resource = new GLOBAL_ANGLE_1037; break; // case PSDImageResourceSection::COLOR_SAMPLER: // resource = new COLOR_SAMPLER_1038; // break; case PSDImageResourceSection::ICC_PROFILE: resource = new ICC_PROFILE_1039; break; // case PSDImageResourceSection::WATERMARK: // resource = new WATERMARK_1040; // break; // case PSDImageResourceSection::ICC_UNTAGGED: // resource = new ICC_UNTAGGED_1041; // break; // case PSDImageResourceSection::EFFECTS_VISIBLE: // resource = new EFFECTS_VISIBLE_1042; // break; // case PSDImageResourceSection::SPOT_HALFTONE: // resource = new SPOT_HALFTONE_1043; // break; // case PSDImageResourceSection::DOC_IDS: // resource = new DOC_IDS_1044; // break; // case PSDImageResourceSection::ALPHA_NAMES_UNI: // resource = new ALPHA_NAMES_UNI_1045; // break; // case PSDImageResourceSection::IDX_COL_TAB_CNT: // resource = new IDX_COL_TAB_CNT_1046; // break; // case PSDImageResourceSection::IDX_TRANSPARENT: // resource = new IDX_TRANSPARENT_1047; // break; case PSDImageResourceSection::GLOBAL_ALT: resource = new GLOBAL_ALT_1049; break; // case PSDImageResourceSection::SLICES: // resource = new SLICES_1050; // break; // case PSDImageResourceSection::WORKFLOW_URL_UNI: // resource = new WORKFLOW_URL_UNI_1051; // break; // case PSDImageResourceSection::JUMP_TO_XPEP: // resource = new JUMP_TO_XPEP_1052; // break; // case PSDImageResourceSection::ALPHA_ID: // resource = new ALPHA_ID_1053; // break; // case PSDImageResourceSection::URL_LIST_UNI: // resource = new URL_LIST_UNI_1054; // break; // case PSDImageResourceSection::VERSION_INFO: // resource = new VERSION_INFO_1057; // break; // case PSDImageResourceSection::EXIF_DATA: // resource = new EXIF_DATA_1058; // break; // case PSDImageResourceSection::XMP_DATA: // resource = new XMP_DATA_1060; // break; // case PSDImageResourceSection::PATH_INFO_FIRST: // resource = new PATH_INFO_FIRST_2000; // break; // case PSDImageResourceSection::PATH_INFO_LAST: // resource = new PATH_INFO_LAST_2998; // break; // case PSDImageResourceSection::CLIPPING_PATH: // resource = new CLIPPING_PATH_2999; // break; // case PSDImageResourceSection::PRINT_FLAGS_2: // resource = new PRINT_FLAGS_2_10000; // break; default: ; } if (resource) { resource->interpretBlock(data); } return valid(); }