ALERROR CImageLibrary::AddImage (SDesignLoadCtx &Ctx, CXMLElement *pDesc) // AddImage // // Add an image to the library { ALERROR error; // Create the image desc CObjectImage *pNewImage; if (error = CObjectImage::CreateFromXML(Ctx, pDesc, &pNewImage)) return error; // If we defer loading, at least make sure that the images exist if (pDesc->GetAttributeBool(LOAD_ON_USE_ATTRIB)) { if (error = pNewImage->Exists(Ctx)) { delete pNewImage; return error; } } // Otherwise, load and lock the image else { if (error = pNewImage->Lock(Ctx)) { delete pNewImage; return error; } } // Add to the library if (error = m_Library.AddEntry(pNewImage->GetUNID(), (CObject *)pNewImage)) { if (FindImage(pNewImage->GetUNID())) Ctx.sError = strPatternSubst(CONSTLIT("Duplicate UNID: %x"), pNewImage->GetUNID()); else Ctx.sError = strPatternSubst(CONSTLIT("Unable to add image to library: %x"), pNewImage->GetUNID()); delete pNewImage; return error; } return NOERROR; }
CG32bitImage *CDesignCollection::GetImage (DWORD dwUNID, DWORD dwFlags) // GetImage // // Returns an image { CDesignType *pType = m_AllTypes.FindByUNID(dwUNID); if (pType == NULL) return NULL; CObjectImage *pImage = CObjectImage::AsType(pType); if (pImage == NULL) return NULL; if (dwFlags & FLAG_IMAGE_COPY) return pImage->CreateCopy(); else { CString sError; CG32bitImage *pRawImage = pImage->GetImage(strFromInt(dwUNID), &sError); if (pRawImage == NULL) kernelDebugLogMessage(sError); // Lock, if requested. NOTE: Since we obtained the image above, // this call is guaranteed to succeed. if (dwFlags & FLAG_IMAGE_LOCK) pImage->Lock(SDesignLoadCtx()); // Done return pRawImage; } }