コード例 #1
0
        // This loads the image
        protected override void LocalLoadImage()
        {
            // Leave when already loaded
            if (this.IsImageLoaded)
            {
                return;
            }

            lock (this)
            {
                // Load file data
                if (bitmap != null)
                {
                    bitmap.Dispose();
                }
                bitmap = null;
                MemoryStream filedata = new MemoryStream(File.ReadAllBytes(filepathname));

                // Get a reader for the data
                IImageReader reader = ImageDataFormat.GetImageReader(filedata, probableformat, General.Map.Data.Palette);
                if (!(reader is UnknownImageReader))
                {
                    // Load the image
                    filedata.Seek(0, SeekOrigin.Begin);
                    try { bitmap = reader.ReadAsBitmap(filedata); }
                    catch (InvalidDataException)
                    {
                        // Data cannot be read!
                        bitmap = null;
                    }
                }

                // Not loaded?
                if (bitmap == null)
                {
                    General.ErrorLogger.Add(ErrorType.Error, "Image file \"" + filepathname + "\" data format could not be read, while loading image " + tileindex + ". Is this a valid picture file at all?");
                    loadfailed = true;
                }
                else
                {
                    // Get width and height
                    width  = bitmap.Size.Width;
                    height = bitmap.Size.Height;
                }

                // Pass on to base
                filedata.Dispose();
                base.LocalLoadImage();
            }
        }
コード例 #2
0
        // This loads the image
        protected override void LocalLoadImage()
        {
            // Leave when already loaded
            if (this.IsImageLoaded)
            {
                return;
            }

            lock (this)
            {
                Stream data = General.Map.Data.GetImageStream(this.tileindex);
                if (data != null)
                {
                    // Check image size...
                    if (width < 1 || height < 1)
                    {
                        General.ErrorLogger.Add(ErrorType.Error, "Art image " + this.tileindex + " has invalid size: " + width + "x" + height);
                    }
                    else if (data.Length != width * height)
                    {
                        General.ErrorLogger.Add(ErrorType.Error, "Art image " + this.tileindex + " data length doesn't match image size");
                    }
                    else
                    {
                        // Copy lump data to memory
                        byte[] membytes = new byte[(int)data.Length];

                        lock (data)
                        {
                            data.Seek(0, SeekOrigin.Begin);
                            data.Read(membytes, 0, (int)data.Length);
                        }

                        using (MemoryStream mem = new MemoryStream(membytes))
                        {
                            // Get a reader for the data
                            IImageReader reader = ImageDataFormat.GetImageReader(mem, SupportedImageFormat.ART, General.Map.Data.Palette);
                            if (!(reader is ARTImageReader))
                            {
                                // Data is in an unknown format!
                                General.ErrorLogger.Add(ErrorType.Error, "Art image " + this.tileindex + " data format could not be read.");
                                bitmap = null;
                            }
                            else
                            {
                                ARTImageReader artreader = (ARTImageReader)reader;

                                // Read data as bitmap
                                mem.Seek(0, SeekOrigin.Begin);
                                if (bitmap != null)
                                {
                                    bitmap.Dispose();
                                }
                                bitmap   = artreader.ReadAsBitmap(mem, width, height);
                                hasalpha = artreader.HasAlpha;
                            }
                        }
                    }

                    // Failed when no bitmap
                    loadfailed = (bitmap == null);
                }
                else
                {
                    // Missing a tile!
                    General.ErrorLogger.Add(ErrorType.Error, "Missing ART tile " + this.tileindex + ". Make sure the required resources are located in the map or engine directory.");
                    loadfailed = true;
                }

                // Pass on to base
                base.LocalLoadImage();
            }
        }