private bool LoadTexture(UUID textureID, ref Image texture, bool removeAlpha)
{
ManualResetEvent gotImage = new ManualResetEvent(false);
Image img = null;
try
{
gotImage.Reset();
bool hasAlpha, fullAlpha, isMask;
byte[] tgaData;
if (RHelp.LoadCachedImage(textureID, out tgaData, out hasAlpha, out fullAlpha, out isMask))
{
img = LoadTGAClass.LoadTGA(new MemoryStream(tgaData));
}
else
{
instance.Client.Assets.RequestImage(textureID, (TextureRequestState state, AssetTexture assetTexture) =>
{
ManagedImage mi;
if (state == TextureRequestState.Finished && OpenJPEG.DecodeToImage(assetTexture.AssetData, out mi))
{
if (removeAlpha)
{
if ((mi.Channels & ManagedImage.ImageChannels.Alpha) != 0)
{
mi.ConvertChannels(mi.Channels & ~ManagedImage.ImageChannels.Alpha);
}
}
tgaData = mi.ExportTGA();
img = LoadTGAClass.LoadTGA(new MemoryStream(tgaData));
RHelp.SaveCachedImage(tgaData, textureID, (mi.Channels & ManagedImage.ImageChannels.Alpha) != 0, false, false);
}
gotImage.Set();
}
);
gotImage.WaitOne(30 * 1000, false);
}
if (img != null)
{
texture = img;
return true;
}
return false;
}
catch (Exception e)
{
Logger.Log(e.Message, Helpers.LogLevel.Error, instance.Client, e);
return false;
}
}