示例#1
0
        private void FetchMapLayer()
        {
            if (!_Client.Network.Connected)
            {
                return;
            }

            GridRegion region;

            if (Client.Grid.GetGridRegion(Client.Network.CurrentSim.Name, GridLayerType.Objects, out region))
            {
                SetMapLayer(null);

                _MapImageID = region.MapImageID;

                Client.Assets.RequestImage(_MapImageID, ImageType.Baked,
                                           delegate(TextureRequestState state, AssetTexture asset)
                {
                    if (state == TextureRequestState.Finished)
                    {
                        using (var reader = new OpenJpegDotNet.IO.Reader(asset.AssetData))
                        {
                            if (!reader.ReadHeader())
                            {
                                return;
                            }
                            _MapLayer = reader.DecodeToBitmap();
                        }
                    }
                });
            }
        }
        public RawImage ToPng(byte[] content)
        {
            using var reader = new OpenJpegDotNet.IO.Reader(content);
            var result = reader.ReadHeader();

            using var rawBitmap = reader.ReadRawBitmap();
            return(new RawImage(rawBitmap.Data.ToArray(), rawBitmap.Width, rawBitmap.Height, 3));
        }
示例#3
0
        private bool LoadTexture(UUID textureID, ref Image texture, bool removeAlpha)
        {
            if (textureID == UUID.Zero)
            {
                return(false);
            }

            ManualResetEvent gotImage = new ManualResetEvent(false);
            Image            img      = null;

            try
            {
                gotImage.Reset();
                instance.Client.Assets.RequestImage(textureID, (state, assetTexture) =>
                {
                    try
                    {
                        if (state == TextureRequestState.Finished)
                        {
                            // what the fk is going on here? lol
                            using (var reader = new OpenJpegDotNet.IO.Reader(assetTexture.AssetData))
                            {
                                if (!reader.ReadHeader())
                                {
                                    throw new Exception("Failed to decode texture header " + assetTexture.AssetID.ToString());
                                }

                                try
                                {
                                    img = reader.Decode().ToBitmap(!removeAlpha);
                                }
                                catch (NotSupportedException)
                                {
                                    img = null;
                                }
                            }
                        }
                    }
                    finally
                    {
                        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);
            }
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog
            {
                AddExtension     = true,
                RestoreDirectory = true,
                Title            = "Save image as...",
                Filter           =
                    "PNG (*.png)|*.png|Targa (*.tga)|*.tga|Jpeg2000 (*.j2c)|*.j2c|Jpeg (*.jpg)|*.jpg|Bitmap (*.bmp)|*.bmp"
            };



            if (dlg.ShowDialog() == DialogResult.OK)
            {
                int type = dlg.FilterIndex;
                if (type == 3)
                { // jpeg2000
                    File.WriteAllBytes(dlg.FileName, UploadData);
                }
                else if (type == 2)
                { // targa
                    using (var reader = new OpenJpegDotNet.IO.Reader(UploadData))
                    {
                        if (reader.ReadHeader())
                        {
                            File.WriteAllBytes(dlg.FileName, reader.Decode().ToTarga().Bytes);
                        }
                    }
                }
                else if (type == 1)
                { // png
                    pbPreview.Image.Save(dlg.FileName, ImageFormat.Png);
                }
                else if (type == 4)
                { // jpg
                    pbPreview.Image.Save(dlg.FileName, ImageFormat.Jpeg);
                }
                else
                { // BMP
                    pbPreview.Image.Save(dlg.FileName, ImageFormat.Bmp);
                }
            }

            dlg.Dispose();
        }
        private async void ButtonClick(object sender, EventArgs e)
        {
            try
            {
                var webClient = new WebClient();
                var content   = await webClient.DownloadDataTaskAsync(new Uri(this.textBox.Text));

                using (var reader = new OpenJpegDotNet.IO.Reader(content))
                {
                    var result = reader.ReadHeader();
                    this.pictureBox.Image?.Dispose();
                    this.pictureBox.Image = reader.ReadData();
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }
示例#6
0
 private static TextureDownloadCallback TextureDownloadCallback(Bitmap[] detailTexture, int i, AutoResetEvent textureDone)
 {
     return((state, assetTexture) =>
     {
         if (state == TextureRequestState.Finished && assetTexture?.AssetData != null)
         {
             using (var reader = new OpenJpegDotNet.IO.Reader(assetTexture.AssetData))
             {
                 if (reader.ReadHeader())
                 {
                     detailTexture[i] = reader.DecodeToBitmap();
                 }
                 else
                 {
                     throw new Exception("Cannot read J2K header");
                 }
             }
         }
         textureDone.Set();
     });
 }
示例#7
0
        /// <summary>
        /// Decodes the JPEG2000 data in <code>AssetData</code> to the
        /// <seealso cref="ManagedImage"/> object <seealso cref="Image"/>
        /// </summary>
        /// <returns>True if the decoding was successful, otherwise false</returns>
        public override bool Decode()
        {
            if (AssetData == null || AssetData.Length <= 0)
            {
                return(false);
            }

            this.Components = 0;

            using (var reader = new OpenJpegDotNet.IO.Reader(AssetData))
            {
                // *hack: decode from ManagedImage directly or better yet, get rid of ManagedImage entirely!
                if (!reader.ReadHeader())
                {
                    return(false);
                }
                Image = new ManagedImage(reader.DecodeToBitmap());
            }

            if ((Image.Channels & ManagedImage.ImageChannels.Color) != 0)
            {
                Components += 3;
            }
            if ((Image.Channels & ManagedImage.ImageChannels.Gray) != 0)
            {
                ++Components;
            }
            if ((Image.Channels & ManagedImage.ImageChannels.Bump) != 0)
            {
                ++Components;
            }
            if ((Image.Channels & ManagedImage.ImageChannels.Alpha) != 0)
            {
                ++Components;
            }

            return(true);
        }
示例#8
0
        bool LoadTexture(UUID textureID, ref Image texture, bool removeAlpha)
        {
            var   gotImage = new System.Threading.ManualResetEvent(false);
            Image img      = null;

            try
            {
                gotImage.Reset();
                Client.Assets.RequestImage(textureID, (state, assetTexture) =>
                {
                    if (state == TextureRequestState.Finished)
                    {
                        using (var reader = new OpenJpegDotNet.IO.Reader(assetTexture.AssetData))
                        {
                            if (reader.ReadHeader())
                            {
                                img = reader.Decode().ToBitmap(!removeAlpha);
                            }
                        }
                    }
                    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, Client, e);
                return(false);
            }
        }
示例#9
0
        void SaveTextures()
        {
            OnProgress("Exporting textures...");
            for (int i = 0; i < Textures.Count; i++)
            {
                var id = Textures[i];
                if (TextureNames[i] == null)
                {
                    OnProgress("Skipping " + id + " due to insufficient permissions");
                    continue;
                }

                string filename = TextureNames[i] + "." + ImageFormat.ToLower();

                OnProgress("Fetching texture" + id);

                Image  wImage   = null;
                byte[] jpegData = null;

                try
                {
                    AutoResetEvent gotImage = new AutoResetEvent(false);
                    Client.Assets.RequestImage(id, ImageType.Normal, (state, asset) =>
                    {
                        if (state == TextureRequestState.Finished && asset != null)
                        {
                            jpegData = asset.AssetData;
                            using (var reader = new OpenJpegDotNet.IO.Reader(jpegData))
                            {
                                if (reader.ReadHeader())
                                {
                                    wImage = reader.DecodeToBitmap();
                                }
                                else
                                {
                                    throw new Exception("Cannot read J2K header");
                                }
                            }
                            gotImage.Set();
                        }
                        else if (state != TextureRequestState.Pending && state != TextureRequestState.Started && state != TextureRequestState.Progress)
                        {
                            gotImage.Set();
                        }
                    });
                    gotImage.WaitOne(120 * 1000, false);

                    if (wImage != null)
                    {
                        string fullFileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(FileName), filename);
                        switch (ImageFormat)
                        {
                        case "PNG":
                            wImage.Save(fullFileName, System.Drawing.Imaging.ImageFormat.Png);
                            break;

                        case "JPG":
                            wImage.Save(fullFileName, System.Drawing.Imaging.ImageFormat.Jpeg);
                            break;

                        case "BMP":
                            wImage.Save(fullFileName, System.Drawing.Imaging.ImageFormat.Bmp);
                            break;

                        case "J2C":
                            File.WriteAllBytes(fullFileName, jpegData);
                            break;

                        case "TGA":
                            //File.WriteAllBytes(fullFileName, mImage.ExportTGA());
                            break;

                        default:
                            throw new Exception("Unsupported image format");
                        }
                        OnProgress("Saved to " + fullFileName);
                    }
                    else
                    {
                        throw new Exception("Failed to decode image");
                    }
                }
                catch (Exception ex)
                {
                    OnProgress("Failed: " + ex);
                    TextureNames[i] = null;
                }
            }
        }
示例#10
0
        public void LoadImage(string fname)
        {
            FileName = fname;

            if (string.IsNullOrEmpty(FileName))
            {
                return;
            }

            txtStatus.AppendText("Loading..." + Environment.NewLine);

            string extension = Path.GetExtension(FileName).ToLower();

            try
            {
                Bitmap bitmap = null;
                switch (extension)
                {
                case ".jp2":
                case ".j2c":
                    // Upload JPEG2000 images untouched
                    UploadData = File.ReadAllBytes(FileName);

                    using (var reader = new OpenJpegDotNet.IO.Reader(UploadData))
                    {
                        if (reader.ReadHeader())
                        {
                            bitmap = reader.DecodeToBitmap();
                        }
                    }

                    txtStatus.AppendText("Loaded raw JPEG2000 data " + FileName + Environment.NewLine);
                    break;

                case ".tga":
                    bitmap = LoadTGAClass.LoadTGA(FileName);
                    break;

                default:
                    bitmap = Image.FromFile(FileName) as Bitmap;
                    break;
                }

                if (bitmap == null)
                {
                    txtStatus.AppendText("Failed to load image " + FileName + Environment.NewLine);
                    return;
                }

                txtStatus.AppendText("Loaded image " + FileName + Environment.NewLine);

                int width  = bitmap.Width;
                int height = bitmap.Height;

                // Handle resizing to prevent excessively large images and irregular dimensions
                if (!IsPowerOfTwo((uint)width) || !IsPowerOfTwo((uint)height) || width > 1024 || height > 1024)
                {
                    txtStatus.AppendText("Image has irregular dimensions " + width + "x" + height + Environment.NewLine);

                    width  = ClosestPowerOwTwo(width);
                    height = ClosestPowerOwTwo(height);

                    width  = width > 1024 ? 1024 : width;
                    height = height > 1024 ? 1024 : height;

                    txtStatus.AppendText("Resizing to " + width + "x" + height + Environment.NewLine);

                    Bitmap   resized  = new Bitmap(width, height, bitmap.PixelFormat);
                    Graphics graphics = Graphics.FromImage(resized);

                    graphics.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    graphics.InterpolationMode =
                        System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    graphics.DrawImage(bitmap, 0, 0, width, height);

                    bitmap.Dispose();
                    bitmap = resized;
                }

                txtStatus.AppendText("Encoding image..." + Environment.NewLine);

                using (var writer = new OpenJpegDotNet.IO.Writer(bitmap))
                {
                    var cp = new OpenJpegDotNet.CompressionParameters();
                    OpenJpegDotNet.OpenJpeg.SetDefaultEncoderParameters(cp);
                    cp.CodingParameterDistortionAllocation = 1;
                    if (chkLossless.Checked)
                    {
                        cp.TcpNumLayers = 1;
                        cp.TcpRates[0]  = 0;
                    }
                    else
                    {
                        cp.TcpNumLayers = 5;
                        cp.TcpRates[0]  = 1920;
                        cp.TcpRates[1]  = 480;
                        cp.TcpRates[2]  = 120;
                        cp.TcpRates[3]  = 30;
                        cp.TcpRates[4]  = 10;
                        cp.Irreversible = true;
                        cp.TcpMCT       = 1;
                    }
                    writer.SetupEncoderParameters(cp);
                    UploadData = writer.Encode();
                }

                txtStatus.AppendText("Finished encoding." + Environment.NewLine);
                ImageLoaded = true;
                UpdateButtons();
                txtAssetID.Text = UUID.Zero.ToString();

                pbPreview.Image = bitmap;
                lblSize.Text    = string.Format("{0}x{1} {2} KB", bitmap.Width, bitmap.Height, Math.Round((double)UploadData.Length / 1024.0d, 2));
            }
            catch (Exception ex)
            {
                UploadData        = null;
                btnSave.Enabled   = false;
                btnUpload.Enabled = false;
                txtStatus.AppendText(string.Format("Failed to load the image:" + Environment.NewLine
                                                   + "{0}" + Environment.NewLine, ex.Message));
            }
        }