bool getPictureDataForType(PackagePtr pParams, int index, std::vector<unsigned char> &buf, std::string &type)
{
	PA_ErrorCode err = eER_NoErr;
	unsigned i = 0;
	PA_Unistring t;
	std::map<CUTF8String, uint32_t> types;
	PA_Picture picture = *(PA_Picture *)(pParams[index - 1]);
	while (err == eER_NoErr)
	{
		t = PA_GetPictureData(picture, ++i, NULL);
		err = PA_GetLastError();
		if(err == eER_NoErr)
		{
			uint32_t len = (uint32_t)(t.fLength * 4) + sizeof(uint8_t);
			std::vector<uint8_t> u(len);
			PA_ConvertCharsetToCharset(
																 (char *)t.fString,
																 t.fLength * sizeof(PA_Unichar),
																 eVTC_UTF_16,
																 (char *)&u[0],
																 len,
																 eVTC_UTF_8
																 );
			CUTF8String uti;
			uti = CUTF8String((const uint8_t *)&u[0]);
			CUTF8String typestring;
			size_t pos, found;
			found = 0;
			for(pos = uti.find(';'); pos != CUTF8String::npos; pos = uti.find(';', found))
			{
				typestring = uti.substr(found, pos-found);
				found = pos + 1;
				types.insert(std::map<CUTF8String, uint32_t>::value_type(typestring, i));
			}
			typestring = uti.substr(found, uti.length()-found);
			types.insert(std::map<CUTF8String, uint32_t>::value_type(typestring, i));
		}
	}
	std::map<CUTF8String, uint32_t>::iterator itr;
	itr = types.find((const uint8_t *)type.c_str());
	if (itr != types.end())
	{
		uint32_t pos = itr->second;
		PA_Handle h = PA_NewHandle(0);
		err = eER_NoErr;
		PA_GetPictureData(picture, pos, h);
		err = PA_GetLastError();
		if(err == eER_NoErr)
		{
			unsigned long insize = PA_GetHandleSize(h);
			buf.resize(insize);
			memcpy(&buf[0], (const void *)PA_LockHandle(h), insize);
			PA_UnlockHandle(h);
			PA_DisposeHandle(h);
			return true;
		}
	}
	return false;
}
void _toPictureString(PA_Variable variable, CUTF8String &pictureString)
{
	pictureString.clear();
	
	char buf[64];
	size_t len;
	
	uint32_t i = 0;
	PA_ErrorCode err = eER_NoErr;
	
	while (err == eER_NoErr) 
	{
		PA_Handle h = PA_NewHandle(0);
		PA_Unistring u = PA_GetPictureData(variable.uValue.fPicture, ++i, h);
		err = PA_GetLastError();
		
		if(err == eER_NoErr)
		{
			C_TEXT t;
			t.setUTF16String(&u);
			
			CUTF8String format, formatList;
			t.copyUTF8String(&formatList);
			
			size_t pos = formatList.find(';');
			
			if(pos == CUTF8String::npos)
			{
				format = formatList;
			}else{
				format = formatList.substr(0, pos);
			}
			
			if(pictureString.length())
				pictureString.append((const uint8_t *)", ", 2);
			
			if(PA_GetHandleSize(h) == 1)
			{
				len = sprintf(buf,"1 byte (%s)", format.c_str());	
			}else{
				len = sprintf(buf,"%u bytes (%s)", (unsigned int)PA_GetHandleSize(h), format.c_str());
			}
			
			pictureString.append((const uint8_t *)buf, len);				
		}
		
		PA_DisposeHandle(h);
		
	}
	
}
Beispiel #3
0
void Get_URL_Blob( PA_PluginParameters params )
{
	char* c_url;
	PA_Unistring* URL;
	PA_Handle returnValue;
	MemoryBuffer buffer;
	
	URL = PA_GetStringParameter( params, 1 );
	
	c_url = PA_UnistringToChar(URL);
	
	buffer = getURL(c_url);
	
	returnValue = PA_NewHandle(buffer.size);
	memcpy(*returnValue,buffer.data, buffer.size);
	PA_ReturnBlobHandle( params, returnValue );
}