Пример #1
0
            // --- functions ---
            /// <summary>Gets the texture from this origin.</summary>
            /// <param name="texture">Receives the texture.</param>
            /// <returns>Whether the texture could be obtained successfully.</returns>
            internal override bool GetTexture(out OpenBveApi.Textures.Texture texture)
            {
                Bitmap    bitmap = this.Bitmap;
                Rectangle rect   = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

                /*
                 * If the bitmap format is not already 32-bit BGRA,
                 * then convert it to 32-bit BGRA.
                 * */
                if (bitmap.PixelFormat != PixelFormat.Format32bppArgb)
                {
                    Bitmap   compatibleBitmap = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format32bppArgb);
                    Graphics graphics         = Graphics.FromImage(compatibleBitmap);
                    graphics.DrawImage(bitmap, rect, rect, GraphicsUnit.Pixel);
                    graphics.Dispose();
                    bitmap = compatibleBitmap;
                }

                /*
                 * Extract the raw bitmap data.
                 * */
                BitmapData data = bitmap.LockBits(rect, ImageLockMode.ReadOnly, bitmap.PixelFormat);

                if (data.Stride == 4 * data.Width)
                {
                    /*
                     * Copy the data from the bitmap
                     * to the array in BGRA format.
                     * */
                    byte[] raw = new byte[data.Stride * data.Height];
                    System.Runtime.InteropServices.Marshal.Copy(data.Scan0, raw, 0, data.Stride * data.Height);
                    bitmap.UnlockBits(data);
                    int width  = bitmap.Width;
                    int height = bitmap.Height;

                    /*
                     * Change the byte order from BGRA to RGBA.
                     * */
                    for (int i = 0; i < raw.Length; i += 4)
                    {
                        byte temp = raw[i];
                        raw[i]     = raw[i + 2];
                        raw[i + 2] = temp;
                    }
                    texture = new OpenBveApi.Textures.Texture(width, height, 32, raw);
                    texture = texture.ApplyParameters(this.Parameters);
                    return(true);
                }

                /*
                 * The stride is invalid. This indicates that the
                 * CLI either does not implement the conversion to
                 * 32-bit BGRA correctly, or that the CLI has
                 * applied additional padding that we do not
                 * support.
                 * */
                bitmap.UnlockBits(data);
                texture = null;
                return(false);
            }
Пример #2
0
 /// <summary>Loads a texture and returns the texture data.</summary>
 /// <param name="path">The path to the file or folder that contains the texture.</param>
 /// <param name="parameters">The parameters that specify how to process the texture.</param>
 /// <param name="texture">Receives the texture.</param>
 /// <returns>Whether loading the texture was successful.</returns>
 public override bool LoadTexture(string path, OpenBveApi.Textures.TextureParameters parameters, out OpenBveApi.Textures.Texture texture)
 {
     if (System.IO.File.Exists(path) || System.IO.Directory.Exists(path))
     {
         for (int i = 0; i < Plugins.LoadedPlugins.Length; i++)
         {
             if (Plugins.LoadedPlugins[i].TextureLoaders.Length > 0)
             {
                 try {
                     for (int l = 0; l < Plugins.LoadedPlugins[i].TextureLoaders.Length; l++)
                     {
                         if (Plugins.LoadedPlugins[i].TextureLoaders[l].CanLoadTexture(path))
                         {
                             try {
                                 if (Plugins.LoadedPlugins[i].TextureLoaders[l].LoadTexture(path, out texture))
                                 {
                                     texture = texture.ApplyParameters(parameters);
                                     return(true);
                                 }
                                 Debug.AddMessage(Debug.MessageType.Error, false,
                                                  "Plugin " + Plugins.LoadedPlugins[i].Title + " returned unsuccessfully at LoadTexture"
                                                  );
                             } catch (Exception ex) {
                                 Debug.AddMessage(Debug.MessageType.Error, false,
                                                  "Plugin " + Plugins.LoadedPlugins[i].Title + " raised the following exception at LoadTexture:" + ex.Message
                                                  );
                             }
                         }
                     }
                 } catch (Exception ex) {
                     Debug.AddMessage(Debug.MessageType.Error, false,
                                      "Plugin " + Plugins.LoadedPlugins[i].Title + " raised the following exception at CanLoadTexture:" + ex.Message
                                      );
                 }
             }
         }
         Debug.AddMessage(Debug.MessageType.Error, false,
                          "No plugin found that is capable of loading texture " + path);
     }
     else
     {
         ReportProblem(OpenBveApi.Hosts.ProblemType.PathNotFound, path);
     }
     texture = null;
     return(false);
 }
Пример #3
0
 /// <summary>Loads a texture and returns the texture data.</summary>
 /// <param name="path">The path to the file or folder that contains the texture.</param>
 /// <param name="parameters">The parameters that specify how to process the texture.</param>
 /// <param name="texture">Receives the texture.</param>
 /// <returns>Whether loading the texture was successful.</returns>
 public override bool LoadTexture(string path, OpenBveApi.Textures.TextureParameters parameters, out OpenBveApi.Textures.Texture texture)
 {
     if (System.IO.File.Exists(path) || System.IO.Directory.Exists(path))
     {
         for (int i = 0; i < Plugins.LoadedPlugins.Length; i++)
         {
             if (Plugins.LoadedPlugins[i].Texture != null)
             {
                 try
                 {
                     if (Plugins.LoadedPlugins[i].Texture.CanLoadTexture(path))
                     {
                         try
                         {
                             if (Plugins.LoadedPlugins[i].Texture.LoadTexture(path, out texture))
                             {
                                 //texture.CompatibleTransparencyMode = Interface.CurrentOptions.OldTransparencyMode;
                                 texture = texture.ApplyParameters(parameters);
                                 return(true);
                             }
                             Interface.AddMessage(Interface.MessageType.Error, false, "Plugin " + Plugins.LoadedPlugins[i].Title + " returned unsuccessfully at LoadTexture");
                         }
                         catch (Exception ex)
                         {
                             Interface.AddMessage(Interface.MessageType.Error, false, "Plugin " + Plugins.LoadedPlugins[i].Title + " raised the following exception at LoadTexture:" + ex.Message);
                         }
                     }
                 }
                 catch (Exception ex)
                 {
                     Interface.AddMessage(Interface.MessageType.Error, false, "Plugin " + Plugins.LoadedPlugins[i].Title + " raised the following exception at CanLoadTexture:" + ex.Message);
                 }
             }
         }
         Interface.AddMessage(Interface.MessageType.Error, false, "No plugin found that is capable of loading texture " + path);
     }
     else
     {
         ReportProblem(OpenBveApi.Hosts.ProblemType.PathNotFound, path);
     }
     texture = null;
     return(false);
 }
Пример #4
0
 /// <summary>Registers a texture and returns a handle to the texture.</summary>
 /// <param name="texture">The texture data.</param>
 /// <param name="parameters">The parameters that specify how to process the texture.</param>
 /// <param name="handle">Receives the handle to the texture.</param>
 /// <returns>Whether loading the texture was successful.</returns>
 public override bool RegisterTexture(OpenBveApi.Textures.Texture texture, OpenBveApi.Textures.TextureParameters parameters, out OpenBveApi.Textures.TextureHandle handle)
 {
     texture = texture.ApplyParameters(parameters);
     handle  = Textures.RegisterTexture(texture);
     return(true);
 }
Пример #5
0
			// --- functions ---
			/// <summary>Gets the texture from this origin.</summary>
			/// <param name="texture">Receives the texture.</param>
			/// <returns>Whether the texture could be obtained successfully.</returns>
			internal override bool GetTexture(out OpenBveApi.Textures.Texture texture) {
				Bitmap bitmap = this.Bitmap;
				Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
				/* 
				 * If the bitmap format is not already 32-bit BGRA,
				 * then convert it to 32-bit BGRA.
				 * */
				if (bitmap.PixelFormat != PixelFormat.Format32bppArgb) {
					Bitmap compatibleBitmap = new Bitmap(bitmap.Width, bitmap.Height, PixelFormat.Format32bppArgb);
					Graphics graphics = Graphics.FromImage(compatibleBitmap);
					graphics.DrawImage(bitmap, rect, rect, GraphicsUnit.Pixel);
					graphics.Dispose();
					bitmap = compatibleBitmap;
				}
				/*
				 * Extract the raw bitmap data.
				 * */
				BitmapData data = bitmap.LockBits(rect, ImageLockMode.ReadOnly, bitmap.PixelFormat);
				if (data.Stride == 4 * data.Width) {
					/*
					 * Copy the data from the bitmap
					 * to the array in BGRA format.
					 * */
					byte[] raw = new byte[data.Stride * data.Height];
					System.Runtime.InteropServices.Marshal.Copy(data.Scan0, raw, 0, data.Stride * data.Height);
					bitmap.UnlockBits(data);
					int width = bitmap.Width;
					int height = bitmap.Height;
					/*
					 * Change the byte order from BGRA to RGBA.
					 * */
					for (int i = 0; i < raw.Length; i += 4) {
						byte temp = raw[i];
						raw[i] = raw[i + 2];
						raw[i + 2] = temp;
					}
					texture = new OpenBveApi.Textures.Texture(width, height, 32, raw);
					texture = texture.ApplyParameters(this.Parameters);
					return true;
				}
			    /*
					 * The stride is invalid. This indicates that the
					 * CLI either does not implement the conversion to
					 * 32-bit BGRA correctly, or that the CLI has
					 * applied additional padding that we do not
					 * support.
					 * */
			    bitmap.UnlockBits(data);
			    texture = null;
			    return false;
			}