Ejemplo n.º 1
0
bool GeneralImage::LoadImage(const std::wstring& imageName)
{
	if (!m_Skin || imageName.empty())
	{
		DisposeImage();
		return false;
	}

	std::wstring filename = m_Path + imageName;
	m_Skin->MakePathAbsolute(filename);

	// Check extension and if it is missing, add .png
	size_t pos = filename.rfind(L'\\');
	if (filename.find(L'.', (pos == std::wstring::npos) ? 0 : pos + 1) == std::wstring::npos)
	{
		filename += L".png";
	}

	if (m_Bitmap && !m_Bitmap->GetBitmap()->HasFileChanged(filename))
	{
		ApplyTransforms();
		return true;
	}

	ImageOptions info;
	Gfx::D2DBitmap::GetFileInfo(filename, &info);

	if (!info.isValid())
	{
		DisposeImage();
		return false;
	}

	ImageCacheHandle* handle = GetImageCache().Get(info);
	if (!handle)
	{
		auto bitmap = new Gfx::D2DBitmap(filename);

		HRESULT hr = bitmap->Load(m_Skin->GetCanvas());
		if (SUCCEEDED(hr))
		{
			GetImageCache().Put(info, bitmap);
			handle = GetImageCache().Get(info);
			if (!handle) return false;
		}
		else
		{
			delete bitmap;
			bitmap = nullptr;
		}
	}

	DisposeImage();

	if (handle)
	{
		m_Bitmap = handle;

		m_Options.m_Path = info.m_Path;
		m_Options.m_FileSize = info.m_FileSize;
		m_Options.m_FileTime = info.m_FileTime;

		ApplyTransforms();
		return true;
	}

	return false;
}
Ejemplo n.º 2
0
void mexFunction(
                 int nlhs,              // Number of left hand side (output) arguments
                 mxArray *plhs[],       // Array of left hand side arguments
                 int nrhs,              // Number of right hand side (input) arguments
                 const mxArray *prhs[]  // Array of right hand side arguments
                 )
{
    
    char CommandLine[4096+1];
    char *pt, *argv[128];
    int argc = 1;
    
    
    if (nrhs != 2) {    

        PrintHelp();              
        return;
    }
    
    
    if(nlhs > 1) {        
        FatalError("Too many output arguments.");
    }
    
    
    // Setup error handler
    
    cmsSetErrorHandler(MatLabErrorHandler);
    
    // Defaults

    Verbose     = 0;
    cInProf     = NULL;
    cOutProf    = NULL;
    cProofing   = NULL;

	lMultiProfileChain = FALSE;
	nProfiles   = 0;

    Intent      = INTENT_PERCEPTUAL;
    ProofingIntent          = INTENT_ABSOLUTE_COLORIMETRIC;
    PrecalcMode = 0;
    BlackPointCompensation  = FALSE;
    lIsDeviceLink           = FALSE;

    // Check types. Fist parameter is array of values, second parameter is command line
    
    if (!mxIsNumeric(prhs[0]))
            FatalError("Type mismatch on argument 1 -- Must be numeric");

    if (!mxIsChar(prhs[1]))
            FatalError("Type mismatch on argument 2 -- Must be string");




    // Unpack string to command line buffer
    
    if (mxGetString(prhs[1], CommandLine, 4096))
        FatalError("Cannot unpack command string");
    
    // Separate to argv[] convention
    
    argv[0] = NULL;
    for (pt = strtok(CommandLine, " ");
                pt;
                pt = strtok(NULL, " ")) {
        
                        argv[argc++] = pt;
    }
    
    
    
    // Parse arguments
    HandleSwitches(argc, argv);
    

    nBytesDepth = SizeOfArrayType(prhs[0]);

    OpenTransforms(argc, argv);


    plhs[0] = AllocateOutputArray(prhs[0], OutputChannels);


    ApplyTransforms(prhs[0], plhs[0]);

    CloseTransforms();
    
    // Done!
}