public override void OnGetGraphic(ImagePackage package, FilePath path)
        {
            // Already resized?
            ResizedImage resized = ResizedImages.Get(path.Path);

            if (resized != null)
            {
                // Sure is!
                package.GotGraphic(resized.Image);

                return;
            }

            if (Callback.WillDelay)
            {
                // Buffer this call until later - we're not on the main thread.

                // Create the callback:
                ResourcesProtocolCallback callback = new ResourcesProtocolCallback(package, path);

                // Hook up the protocol handler for speed later:
                callback.Protocol = this;

                // Request it to run:
                callback.Go();

                return;
            }

            if (path.Filetype == "spa")
            {
                // Animated.

                // Load the binary file - Note: the full file should be called file.spa.bytes for this to work in Unity.
                byte[] binary = ((TextAsset)Resources.Load(path.Path)).bytes;

                if (binary != null)
                {
                    // Apply it now:
                    package.GotGraphic(new SPA(path.Url, binary));
                    return;
                }
            }
            else
            {
                // Image
                Texture2D image = (Texture2D)Resources.Load(path.Directory + path.Filename);

                // Resize the image:
                resized = ResizedImages.Add(path.Path, image);

                if (image != null)
                {
                    package.GotGraphic(resized.Image);
                    return;
                }
            }

            package.GotGraphic("Image not found in resources (" + path.Directory + path.Filename + " from URL '" + path.Url + "').");
        }
        public override void OnGetGraphic(ImagePackage package)
        {
            // Already resized?
            ResizedImage resized = ResizedImages.Get(package.location.Path);

            if (resized != null)
            {
                // Sure is!
                package.GotGraphic(resized.Image);

                return;
            }

            // Main thread only:
            Callback.MainThread(delegate(){
                // Try loading from resources:
                string resUrl = package.location.Directory + package.location.Filename;

                if (resUrl.Length > 0 && resUrl[0] == '/')
                {
                    resUrl = resUrl.Substring(1);
                }

                // Get the image:
                UnityEngine.Object resource = Resources.Load(resUrl);

                if (resource == null)
                {
                    // Note: the full file should be called something.bytes for this to work in Unity.
                    resource = Resources.Load(package.location.Path);
                }

                if (!package.Contents.LoadFromAsset(resource, package))
                {
                    return;
                }

                PictureFormat pict = package.Contents as PictureFormat;

                if (pict != null)
                {
                    // Resize the image:
                    resized = ResizedImages.Add(package.location.Path, pict.Image as Texture2D);

                    // Apply:
                    pict.Image = resized.Image;
                }

                // Great, stop there:
                package.Done();
            });
        }
        /// <summary>Adds the given image to the cache and auto scales it based on the current screen.</summary>
        public static ResizedImage Add(string path, Texture2D originalImage)
        {
            int originalHeight = originalImage.height;
            int originalWidth  = originalImage.width;

            // Resize it:
            Texture2D resized = ImageResizer.Resize(originalImage, ScreenInfo.ResolutionScale);

            // Create and add:
            ResizedImage image = new ResizedImage(resized);

            image.OriginalHeight = originalHeight;
            image.OriginalWidth  = originalWidth;

            // Add:
            Images[path] = image;

            return(image);
        }
		/// <summary>Adds the given image to the cache and auto scales it based on the current screen.</summary>
		public static ResizedImage Add(string path,Texture2D originalImage){
			
			int originalHeight=originalImage.height;
			int originalWidth=originalImage.width;
			
			// Resize it:
			Texture2D resized=ImageResizer.Resize(originalImage,ScreenInfo.ResolutionScale);
			
			// Create and add:
			ResizedImage image=new ResizedImage(resized);
			
			image.OriginalHeight=originalHeight;
			image.OriginalWidth=originalWidth;
			
			// Add:
			Images[path]=image;
			
			return image;
			
		}