public byte[] Decode(PdfObject decodedObject, byte[] inputData, DecodeParameters decodeParameters)
        {
            FIBITMAP myImage = new FIBITMAP();

            using (MemoryStream stream = new MemoryStream(inputData))
            {
                myImage = FreeImage.LoadFromStream(stream);
            }

            Bitmap bitmap = FreeImage.GetBitmap(myImage);

            byte[] result;

            if (decodedObject.ColorSpace == ColorSpace.Gray)
            {
                result = new byte[decodedObject.Width * decodedObject.Height];

                for (int i = 0; i < decodedObject.Width; i++)
                {
                    for (int j = 0; j < decodedObject.Height; j++)
                    {
                        Color pixel     = bitmap.GetPixel(i, j);
                        int   index     = j * decodedObject.Width + i;
                        byte  grayColor = (byte)(0.2126 * pixel.R + 0.7152 * pixel.G + 0.0722 * pixel.B);

                        result[index] = grayColor;
                    }
                }
            }
            else
            {
                result = new byte[decodedObject.Width * decodedObject.Height * 3];

                for (int i = 0; i < decodedObject.Width; i++)
                {
                    for (int j = 0; j < decodedObject.Height; j++)
                    {
                        Color pixel = bitmap.GetPixel(i, j);

                        int index = j * decodedObject.Width + i;
                        result[index * 3]     = pixel.R;
                        result[index * 3 + 1] = pixel.G;
                        result[index * 3 + 2] = pixel.B;
                    }
                }
            }

            return(result);
        }
        protected Texture AllocateFromImageStream(Stream dataStream, ref ImageInformation info)
        {
            Texture  texture = null;
            FIBITMAP image   = FIBITMAP.Zero;

            try
            {
                image = FreeImage.LoadFromStream(dataStream);

                // Write uncompressed data to temporary stream.
                using (var memoryStream = new MemoryStream())
                {
                    // Scale down larger images
                    int resizeWidth  = MAX_TEXTURE_DIMENSION;
                    int resizeHeight = MAX_TEXTURE_DIMENSION;

                    if (_decodeWidth > 0)
                    {
                        resizeWidth = Math.Min(_decodeWidth, MAX_TEXTURE_DIMENSION);
                    }

                    if (_decodeHeight > 0)
                    {
                        resizeHeight = Math.Min(_decodeHeight, MAX_TEXTURE_DIMENSION);
                    }

                    image = ResizeImage(image, resizeWidth, resizeHeight);
                    FreeImage.SaveToStream(image, memoryStream, FREE_IMAGE_FORMAT.FIF_BMP);
                    Stream loadStream = memoryStream;
                    if (loadStream.Length == 0)
                    {
                        loadStream = dataStream;
                        ServiceRegistration.Get <ILogger>().Warn("TextureAssetCore: FreeImage was not able to save image as bitmap into MemoryStream. Using source stream as fallback.");
                    }
                    loadStream.Position = 0;
                    texture             = Texture.FromStream(GraphicsDevice.Device, loadStream, (int)loadStream.Length, _decodeWidth, _decodeHeight, 1,
                                                             Usage.None, Format.A8R8G8B8, Pool.Default, Filter.None, Filter.None, 0, out info);
                }
            }
            catch (Exception e)
            {
                ServiceRegistration.Get <ILogger>().Warn("TextureAssetCore: Error loading texture from stream using FreeImage", e);
            }
            finally
            {
                FreeImage.UnloadEx(ref image);
            }
            return(texture);
        }
Exemple #3
0
        public void Save(FIBITMAP dib, string fileName)
        {
            // Store the bitmap back to disk
            // TARGA_SAVE_RLE = 2
            FreeImage.Save(FREE_IMAGE_FORMAT.FIF_TARGA, dib, fileName, FREE_IMAGE_SAVE_FLAGS.TARGA_SAVE_RLE);

            // The bitmap was saved to disk but is still allocated in memory, so the handle has to be freed.
            if (!dib.IsNull)
            {
                FreeImage.Unload(dib);
            }

            // Make sure to set the handle to null so that it is clear that the handle is not pointing to a bitmap.
            dib.SetNull();
        }
Exemple #4
0
        public GDIBitmap(string filename)
        {
            FreeImage img    = new FreeImage(filename);
            IntPtr    deskDC = NativeMethods.GetDC(new IntPtr(0));
            IntPtr    destDC = NativeMethods.CreateCompatibleDC(deskDC);
            IntPtr    oldBmp = NativeMethods.SelectObject(destDC, _hBmp);

            _hBmp = NativeMethods.CreateCompatibleBitmap(destDC, img.Width, img.Height);
            img.PaintToDevice(destDC, 0, 0, img.Width, img.Height, 0, 0, 0, img.Height, 0);
            NativeMethods.SelectObject(destDC, oldBmp);

            NativeMethods.DeleteDC(deskDC);
            NativeMethods.DeleteDC(destDC);
            img.DisposeAndSetHandle(0);
        }
        private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            IntPtr hdc = e.Graphics.GetHdc();

            int r = SetStretchBltMode(hdc, 3 /* COLORONCOLOR */);

            r = StretchDIBits(hdc,
                              0, 0, this.ClientSize.Width, this.ClientSize.Height,
                              0, 0, (int)FreeImage.GetWidth(this.fi), (int)FreeImage.GetHeight(this.fi),
                              FreeImage.GetBits(this.fi),
                              FreeImage.GetInfo(this.fi),
                              0 /* DIB_RGB_COLORS */, 0x00CC0020 /* SRCCOPY */);

            e.Graphics.ReleaseHdc(hdc);
        }
Exemple #6
0
        static void Main()
        {
            // Check if FreeImage.dll is available
            if (!FreeImage.IsAvailable())
            {
                MessageBox.Show("FreeImage is not available. Aborting.", "Error");
            }

            // Add this class to the FreeImage-Message-Callback
            FreeImage.Message += new OutputMessageFunction(FreeImage_Message);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
Exemple #7
0
        public void Example()
        {
            // Load the sample bitmap.
            FIBITMAP dib = FreeImage.LoadEx("Sample.jpg");

            // Check success
            if (dib.IsNull)
            {
                Console.WriteLine("Sample.jpg could not be loaded. Aborting.");
                return;
            }

            // Get the bitmaps ICC-Profile.
            FIICCPROFILE icc = FreeImage.GetICCProfileEx(dib);

            // Print the profiles address.
            Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));

            // Print the profiles size
            Console.WriteLine("The profiles size is : {0} bytes", icc.Size);

            // Create data for a new profile.
            byte[] data = new byte[256];
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)i;
            }

            // Create the new profile
            icc = new FIICCPROFILE(dib, data);

            Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));
            Console.WriteLine("The profiles size is : {0} bytes", icc.Size);

            // Create the new profile but only use the first 64 bytes
            icc = new FIICCPROFILE(dib, data, 64);

            Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));
            Console.WriteLine("The profiles size is : {0} bytes", icc.Size);

            // CreateICCProfileEx(...) does the same as above
            icc = FreeImage.CreateICCProfileEx(dib, data, 16);

            Console.WriteLine("The profiles memory-address is : 0x{0}", icc.DataPointer.ToString("X"));
            Console.WriteLine("The profiles size is : {0} bytes", icc.Size);

            FreeImage.UnloadEx(ref dib);
        }
Exemple #8
0
        public Task <IImageData> Convert(
            MemoryStream s,
            int bitDepth,
            string rawType,
            ImageMetaData metaData,
            CancellationToken token = default)
        {
            return(Task.Run(() => {
                using (MyStopWatch.Measure()) {
                    FIBITMAP img;
                    int left, top, imgWidth, imgHeight;
                    FREE_IMAGE_FORMAT format = FREE_IMAGE_FORMAT.FIF_RAW;
                    img = FreeImage.LoadFromStream(s, (FREE_IMAGE_LOAD_FLAGS)8, ref format);

                    FreeImage.GetMetadata(FREE_IMAGE_MDMODEL.FIMD_COMMENTS, img, "Raw.Frame.Width", out MetadataTag widthTag);
                    FreeImage.GetMetadata(FREE_IMAGE_MDMODEL.FIMD_COMMENTS, img, "Raw.Frame.Height", out MetadataTag heightTag);
                    FreeImage.GetMetadata(FREE_IMAGE_MDMODEL.FIMD_COMMENTS, img, "Raw.Frame.Left", out MetadataTag leftTag);
                    FreeImage.GetMetadata(FREE_IMAGE_MDMODEL.FIMD_COMMENTS, img, "Raw.Frame.Top", out MetadataTag topTag);
                    left = int.Parse(leftTag.ToString());
                    top = int.Parse(topTag.ToString());
                    imgWidth = int.Parse(widthTag.ToString());
                    imgHeight = int.Parse(heightTag.ToString());

                    using (var memStream = new MemoryStream()) {
                        FreeImage.SaveToStream(img, memStream, FREE_IMAGE_FORMAT.FIF_TIFF, FREE_IMAGE_SAVE_FLAGS.TIFF_NONE);
                        memStream.Position = 0;

                        var decoder = new TiffBitmapDecoder(memStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);

                        CroppedBitmap cropped = new CroppedBitmap(decoder.Frames[0], new System.Windows.Int32Rect(left, top, imgWidth, imgHeight));

                        ushort[] outArray = new ushort[cropped.PixelWidth * cropped.PixelHeight];
                        cropped.CopyPixels(outArray, 2 * cropped.PixelWidth, 0);
                        FreeImage.UnloadEx(ref img);

                        var imageArray = new ImageArray(flatArray: outArray, rawData: s.ToArray(), rawType: rawType);
                        var data = new ImageData(
                            imageArray: imageArray,
                            width: cropped.PixelWidth,
                            height: cropped.PixelHeight,
                            bitDepth: bitDepth,
                            isBayered: true,
                            metaData: metaData);
                        return Task.FromResult <IImageData>(data);
                    }
                }
            }));
        }
Exemple #9
0
        private void TileImage(object sender, DoWorkEventArgs e)
        {
            try
            {
                Options  o   = GetOptions();
                FIBITMAP dib = FreeImage.LoadEx(o.Filename);

                // calc resolution of tile
                int tileSizeResolution = o.VerticesPerTile - 1;

                // commit to dib
                if (o.Craters > 0)
                {
                    // status
                    ce.StatusEvent += (k, msg) => { ((BackgroundWorker)sender).ReportProgress(0, msg); };

                    // reset dib
                    ce.dib = dib;
                    ce.Commit();

                    // save crater heightmap
                    string fn = Path.Combine(Path.GetDirectoryName(o.Filename), $"{Path.GetFileNameWithoutExtension(o.Filename)}-crater.png");
                    FreeImage.Save(FREE_IMAGE_FORMAT.FIF_PNG, dib, fn, FREE_IMAGE_SAVE_FLAGS.DEFAULT);

                    // save crater debug
                    fn = Path.Combine(Path.GetDirectoryName(o.Filename), $"{Path.GetFileNameWithoutExtension(o.Filename)}-crater-debug.png");
                    ce.debugbmp.Save(fn);
                }

                // tile
                TileEngine te = new TileEngine(dib, Path.GetDirectoryName(o.Filename));

                // status
                te.StatusEvent += (k, msg) => { ((BackgroundWorker)sender).ReportProgress(0, msg); };

                te.ScaleZ(o.ZScale / 100.0f);
                te.Tile(tileSizeResolution);

                // free
                FreeImage.Unload(dib);

                e.Result = "Finished";
            }
            catch (Exception ex)
            {
                e.Result = ex.Message;
            }
        }
Exemple #10
0
        public static ImageSource GetImageSourceFromFileName(string fileName)
        {
            if (string.IsNullOrEmpty(fileName))
            {
                return(new BitmapImage());
            }
            var pngFileName = fileName.Replace(".dds", ".png").
                              Replace(".DDS", ".png").
                              Replace(".tga", ".png").
                              Replace(".TGA", ".png");

            if (!File.Exists(pngFileName) && File.Exists(fileName))
            {
                var ms  = new FileStream(fileName, FileMode.Open);
                var dds = FreeImage.LoadFromStream(ms);
                if (dds.IsNull)
                {
                    return(new BitmapImage());
                }
                ms.Close();
                try {
                    FreeImage.Save(FREE_IMAGE_FORMAT.FIF_PNG, dds, pngFileName, FREE_IMAGE_SAVE_FLAGS.PNG_Z_NO_COMPRESSION);
                } catch (Exception e) { }
                dds.SetNull();
                ClearMemory();
            }
            if (File.Exists(pngFileName))
            {
                var img = new BitmapImage();
                img.BeginInit();
                if (pngFileName != null)
                {
                    img.UriSource = new Uri(pngFileName);
                }
                img.EndInit();
                return(img);
            }
            using (var memory = new MemoryStream()) {
                Properties.Resources.errorpic.Save(memory, ImageFormat.Png);
                memory.Position = 0;
                var bitmapImage = new BitmapImage();
                bitmapImage.BeginInit();
                bitmapImage.StreamSource = memory;
                bitmapImage.CacheOption  = BitmapCacheOption.OnLoad;
                bitmapImage.EndInit();
                return(bitmapImage);
            }
        }
Exemple #11
0
 public void ScaleZ(float scale)
 {
     // scale heights
     for (uint i = 0; i < FreeImage.GetHeight(dib); i++)
     {
         Scanline <ushort> line = new Scanline <ushort>(dib, (int)i);
         ushort[]          data = line.Data;
         for (int k = 0; k < data.Length; k++)
         {
             ushort v   = data[k];
             ushort adj = (ushort)(v * scale);
             data[k] = adj;
         }
         line.Data = data;
     }
 }
        /// <summary>
        /// Gets a .NET PropertyItem for this metadata tag.
        /// </summary>
        /// <returns>The .NET PropertyItem.</returns>
        public unsafe System.Drawing.Imaging.PropertyItem GetPropertyItem()
        {
            System.Drawing.Imaging.PropertyItem item = FreeImage.CreatePropertyItem();
            item.Id   = ID;
            item.Len  = (int)Length;
            item.Type = (short)Type;
            byte[] data = new byte[item.Len];
            byte * ptr  = (byte *)FreeImage.GetTagValue(tag);

            for (int i = 0; i < data.Length; i++)
            {
                data[i] = ptr[i];
            }
            item.Value = data;
            return(item);
        }
Exemple #13
0
 public System.Drawing.Image LoadImage(string file)
 {
     try
     {
         FIBITMAP image   = FreeImage.LoadEx(file);
         int      width   = (int)FreeImage.GetWidth(image);
         int      height  = (int)FreeImage.GetHeight(image);
         int      fileBPP = (int)FreeImage.GetBPP(image);
         IntPtr   ptr     = FreeImage.GetHbitmap(image, new IntPtr(0), false); //obtain the Hbitmap
         return(System.Drawing.Image.FromHbitmap(ptr));
     }
     catch (Exception ex)
     {
         return(null);
     }
 }
Exemple #14
0
        private void ImageViewerShown(object sender, EventArgs e)
        {
            Text = imageFile;

            Cursor.Current = Cursors.WaitCursor;
            ZoomLevels.SelectedIndexChanged -= ZoomLevelsSelectedIndexChanged;

            foreach (int zoom in ImageView.ZoomLevels)
            {
                ZoomLevels.Items.Add(string.Format("{0}%", zoom));
                if (zoom == 100)
                {
                    ZoomLevels.SelectedIndex = ZoomLevels.Items.Count - 1;
                }
            }
            ZoomLevels.SelectedIndexChanged += ZoomLevelsSelectedIndexChanged;

            try
            {
                originalImage = FreeImage.LoadEx(imageFile);
                if (!originalImage.IsNull)
                {
                    Text = Text + " (" + FreeImage.GetHeight(originalImage) + " x " + FreeImage.GetWidth(originalImage) + ")";

                    FREE_IMAGE_TYPE type = FreeImage.GetImageType(originalImage);
                    if (type != FREE_IMAGE_TYPE.FIT_BITMAP)
                    {
                        displayImage = FreeImage.ToneMapping(originalImage, FREE_IMAGE_TMO.FITMO_REINHARD05, 0, -1);
                    }
                    else
                    {
                        displayImage = FreeImage.Clone(originalImage);
                    }

                    if (!displayImage.IsNull)
                    {
                        ImageView.Image = FreeImage.GetBitmap(displayImage);
                        icon            = FreeImage.Rescale(displayImage, 16, 15, FREE_IMAGE_FILTER.FILTER_BOX);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error " + ex);
            }
            Cursor.Current = Cursors.Default;
        }
Exemple #15
0
        public static Vector2 GetHeightRange(this FIBITMAP dib)
        {
            Vector2 range;

            range.X = ushort.MaxValue;
            range.Y = ushort.MinValue;
            for (uint y = 0; y < FreeImage.GetHeight(dib); y++)
            {
                Scanline <ushort> line = new Scanline <ushort>(dib, (int)y);
                for (int i = 0; i < line.Count; i++)
                {
                    range.X = Math.Min(line[i], range.X);
                    range.Y = Math.Max(line[i], range.Y);
                }
            }
            return(range);
        }
Exemple #16
0
        public void ApplyFilters(List <Schema.SkinFile.Attachment.Filter> filters)
        {
            if (dib.IsNull)
            {
                return;
            }

            foreach (Schema.SkinFile.Attachment.Filter filter in filters)
            {
                switch (filter.name)
                {
                case "invert":
                {
                    ///
                    /// TODO: Variable invertion using amount property
                    ///
                    FreeImage.AdjustColors(dib, 0, 0, 0, true);
                    break;
                }

                case "colorOverlay":
                {
                    try
                    {
                        ///
                        /// TODO: Variable overlay using amount property
                        ///
                        RGBQUAD overlayColor = new RGBQUAD(), oldColor;
                        overlayColor.uintValue = Convert.ToUInt32(filter.color, 16);
                        //Console.WriteLine((double)filter.amount / 100);
                        for (uint y = 0; y < FreeImage.GetHeight(dib); y++)
                        {
                            for (uint x = 0; x < FreeImage.GetWidth(dib); x++)
                            {
                                FreeImage.GetPixelColor(dib, x, y, out oldColor);
                                overlayColor.rgbReserved = oldColor.rgbReserved;
                                FreeImage.SetPixelColor(dib, x, y, ref overlayColor);
                            }
                        }
                    }
                    catch { }
                    break;
                }
                }
            }
        }
Exemple #17
0
        public GDIBitmap(string filename)
        {
            FreeImage img = new FreeImage(filename);
            IntPtr deskDC = NativeUser32Api.GetDC(new IntPtr(0));
            _destDC = NativeGdi32Api.CreateCompatibleDC(deskDC);
            IntPtr oldObj = NativeGdi32Api.SelectObject(_destDC, _hBmp);
            _hBmp = NativeGdi32Api.CreateCompatibleBitmap(_destDC, img.Width, img.Height);
            img.PaintToDevice(_destDC, 0, 0, img.Width, img.Height, 0, 0, 0, img.Height, 0);
            NativeGdi32Api.SelectObject(_destDC, oldObj);

            _width = img.Width;
            _height = img.Height;

            NativeGdi32Api.DeleteDC(deskDC);
            //NativeGdi32Api.DeleteDC(destDC);
            img.Dispose();
        }
Exemple #18
0
        public Base64Image(string dataURI, FREE_IMAGE_LOAD_FLAGS flags)
        {
            Match match = Regex.Match(dataURI, @"data:image/(?<type>.+?);base64,(?<data>.+)");

            if (match.Groups["data"] != null)
            {
                byte[] byteArray = Convert.FromBase64String(match.Groups["data"].Value);
                using (MemoryStream byteStream = new MemoryStream(byteArray))
                {
                    dib.SetNull();
                    FREE_IMAGE_FORMAT format = FREE_IMAGE_FORMAT.FIF_PNG;
                    if (match.Groups["type"] != null)
                    {
                        switch (match.Groups["type"].Value.ToLower())
                        {
                        case "bmp":
                        {
                            format = FREE_IMAGE_FORMAT.FIF_BMP;
                            break;
                        }

                        case "png":
                        {
                            format = FREE_IMAGE_FORMAT.FIF_PNG;
                            break;
                        }

                        case "jpeg":
                        case "jpg":
                        {
                            format = FREE_IMAGE_FORMAT.FIF_JPEG;
                            break;
                        }

                        case "tga":
                        {
                            format = FREE_IMAGE_FORMAT.FIF_TARGA;
                            break;
                        }
                        }
                    }
                    dib = FreeImage.LoadFromStream(byteStream, flags, ref format);
                }
            }
        }
Exemple #19
0
        //private string getSuffix(ExportFileType type) {

        //}

        private DibMd loadFile(string srcPath, int icoSize)
        {
            string srcSuffix = Path.GetExtension(srcPath).ToLower();

            FIBITMAP dib;

            try {
                switch (srcSuffix)
                {
                case ".ico": {
                    dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_ICO, srcPath, FREE_IMAGE_LOAD_FLAGS.DEFAULT);
                    break;
                }

                case ".bmp": {
                    dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_BMP, srcPath, FREE_IMAGE_LOAD_FLAGS.DEFAULT);
                    break;
                }

                case ".jpg": {
                    dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_JPEG, srcPath, FREE_IMAGE_LOAD_FLAGS.DEFAULT);
                    break;
                }

                case ".png": {
                    dib = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_PNG, srcPath, FREE_IMAGE_LOAD_FLAGS.DEFAULT);
                    break;
                }

                default: {
                    Bitmap img = FileIcon.getIcon(srcPath, icoSize);
                    if (img == null)
                    {
                        return(null);
                    }
                    dib = FreeImage.CreateFromBitmap(img);
                    break;
                    //return;
                }
                }
                return(new DibMd(dib));
            } catch (Exception) { }

            return(null);
        }
Exemple #20
0
        /// <summary>
        /// Convert tga -> bitmap
        /// </summary>
        /// <param name="data">bytes of tga image file</param>
        /// <returns></returns>
        public Bitmap Tga2Bitmap(byte[] data)
        {
            Bitmap bm;

            using (var ms = new MemoryStream(data))
            {
                // create targa
                FIBITMAP dib = FreeImage.LoadFromStream(ms, FREE_IMAGE_LOAD_FLAGS.TARGA_LOAD_RGB888);
                if (dib.IsNull)
                {
                    throw new Exception("Targa image is corrupted");
                }

                // convert targa->bitmap
                bm = FreeImage.GetBitmap(dib);
            }
            return(bm);
        }
Exemple #21
0
        public IEncoder CreateIfSuitable(ResizeSettings settings, object original)
        {
            ImageFormat requestedFormat = DefaultEncoder.GetRequestedFormat(settings.Format, ImageFormat.Jpeg);

            if (requestedFormat == null || !IsValidOutputFormat(requestedFormat))
            {
                return(null);                                                                  //An unsupported format was explicitly specified.
            }
            if (!"freeimage".Equals(settings["encoder"], StringComparison.OrdinalIgnoreCase))
            {
                return(null);
            }
            if (!FreeImage.IsAvailable())
            {
                return(null);
            }
            return(new FreeImageEncoderPlugin(settings, original));
        }
Exemple #22
0
        private DibMd formatOutput(DibMd dibMd, int icoSize, int bpp)
        {
            if (dibMd == null)
            {
                return(null);
            }

            uint width  = FreeImage.GetWidth(dibMd.dib);
            uint height = FreeImage.GetHeight(dibMd.dib);

            try {
                FIBITMAP dibOut = formatImage(dibMd.dib, icoSize, bpp);

                return(new DibMd(dibOut));
            } catch (Exception) { }

            return(null);
        }
Exemple #23
0
        public override IAsset Import(string pathToFile)
        {
            var name = Path.GetFileNameWithoutExtension(pathToFile);

            if (Texture.textures.ContainsKey(name))
            {
                return(Texture.textures[name]);
            }
            var texture = new Texture();
            var dib     = FreeImage.LoadEx(pathToFile);

            texture.TBO      = -1;
            texture.FullPath = pathToFile;
            texture.bitmap   = FreeImage.GetBitmap(dib);
            //Console.WriteLine (IsPowerOfTwo(texture.bitmap.Width) +" : "+IsPowerOfTwo(texture.bitmap.Height));
            Texture.textures.Add(texture.Name, texture);
            return(texture);
        }
        private void ResizeImage(string file)
        {
            string   newfile = Path.Combine(_tempFolder, "img" + _counter.ToString("000000") + ".jpg");
            FIBITMAP dib     = FreeImage.LoadEx(file);

            uint   dw = FreeImage.GetWidth(dib);
            uint   dh = FreeImage.GetHeight(dib);
            int    tw = ServiceProvider.Settings.DefaultSession.TimeLapse.VideoType.Width;
            int    th = ServiceProvider.Settings.DefaultSession.TimeLapse.VideoType.Height;
            double zw = (tw / (double)dw);
            double zh = (th / (double)dh);
            double z  = 0;

            z  = !ServiceProvider.Settings.DefaultSession.TimeLapse.FillImage ? ((zw <= zh) ? zw : zh) : ((zw >= zh) ? zw : zh);
            dw = (uint)(dw * z);
            dh = (uint)(dh * z);
            int difw = (int)(tw - dw);
            int difh = (int)(th - dh);

            if (FreeImage.GetFileType(file, 0) == FREE_IMAGE_FORMAT.FIF_RAW)
            {
                FIBITMAP bmp     = FreeImage.ToneMapping(dib, FREE_IMAGE_TMO.FITMO_REINHARD05, 0, 0); // ConvertToType(dib, FREE_IMAGE_TYPE.FIT_BITMAP, false);
                FIBITMAP resized = FreeImage.Rescale(bmp, (int)dw, (int)dh, FREE_IMAGE_FILTER.FILTER_BILINEAR);
                FIBITMAP final   = FreeImage.EnlargeCanvas <RGBQUAD>(resized, difw / 2, difh / 2, difw - (difw / 2), difh - (difh / 2),
                                                                     new RGBQUAD(System.Drawing.Color.Black),
                                                                     FREE_IMAGE_COLOR_OPTIONS.FICO_RGB);
                FreeImage.SaveEx(final, newfile);
                FreeImage.UnloadEx(ref final);
                FreeImage.UnloadEx(ref resized);
                FreeImage.UnloadEx(ref dib);
                FreeImage.UnloadEx(ref bmp);
            }
            else
            {
                FIBITMAP resized = FreeImage.Rescale(dib, (int)dw, (int)dh, FREE_IMAGE_FILTER.FILTER_BILINEAR);
                FIBITMAP final   = FreeImage.EnlargeCanvas <RGBQUAD>(resized, difw / 2, difh / 2, difw - (difw / 2), difh - (difh / 2),
                                                                     new RGBQUAD(System.Drawing.Color.Black),
                                                                     FREE_IMAGE_COLOR_OPTIONS.FICO_RGB);
                FreeImage.SaveEx(final, newfile);
                FreeImage.UnloadEx(ref final);
                FreeImage.UnloadEx(ref resized);
                FreeImage.UnloadEx(ref dib);
            }
        }
Exemple #25
0
        public GDIBitmap(string filename)
        {
            FreeImage img    = new FreeImage(filename);
            IntPtr    deskDC = NativeUser32Api.GetDC(new IntPtr(0));

            _destDC = NativeGdi32Api.CreateCompatibleDC(deskDC);
            IntPtr oldObj = NativeGdi32Api.SelectObject(_destDC, _hBmp);

            _hBmp = NativeGdi32Api.CreateCompatibleBitmap(_destDC, img.Width, img.Height);
            img.PaintToDevice(_destDC, 0, 0, img.Width, img.Height, 0, 0, 0, img.Height, 0);
            NativeGdi32Api.SelectObject(_destDC, oldObj);

            _width  = img.Width;
            _height = img.Height;

            NativeGdi32Api.DeleteDC(deskDC);
            //NativeGdi32Api.DeleteDC(destDC);
            img.Dispose();
        }
Exemple #26
0
        static void Main(string[] args)
        {
            // Check if FreeImage.dll is available (can be in %path%).
            if (!FreeImage.IsAvailable())
            {
                Console.WriteLine("FreeImage.dll seems to be missing. Aborting.");
                return;
            }

            // Add this class to the message event
            FreeImageEngine.Message += new OutputMessageFunction(FreeImage_Message);

            Sample sample = new Sample();

            sample.Example();

            // Remove this class from the message event
            FreeImageEngine.Message -= new OutputMessageFunction(FreeImage_Message);
        }
Exemple #27
0
        private void btnLoadFile_Click(object sender, EventArgs e)
        {
            // Loads up a file dialog
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "Image Files|*.bmp;*.jpg;*.png;*.gif;*.tga; | All files|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                // If there were previous textures, dispose of them
                ClearTextures();

                // Load a temporary file
                FIBITMAP tmpFile = FreeImage.LoadEx(ofd.FileName);
                if (tmpFile.IsNull)
                {
                    MessageBox.Show("Couldn't load the selected image!");
                    return;
                }
                // Convert it to 32 bits
                FIBITMAP imgFile = FreeImage.ConvertTo32Bits(tmpFile);

                // Dispose of the temp file
                FreeImage.UnloadEx(ref tmpFile);

                // Get a .NET bitmap from FreeImage
                bmTexture = FreeImage.GetBitmap(imgFile);

                // Get the bytes as well as other information from the file
                normalMap.SetTexture(imgFile);

                // Dispose of another FreeImage file
                FreeImage.UnloadEx(ref imgFile);

                // Put it on screen
                pbxTexture.Image = bmTexture;

                // Generate the normal map with the default settings
                GenerateNormalMap();

                // Enable the options
                ToggleOptions(true);
            }
        }
Exemple #28
0
        /// <summary>
        /// Convert bitmap -> tga
        /// </summary>
        /// <param name="image">image to convert</param>
        /// <returns></returns>
        public FIBITMAP Bitmap2Tga(Bitmap image)
        {
            FIBITMAP dib;

            using (var bitmap = new Bitmap(image.Width, image.Height))
            {
                using (var canvas = Graphics.FromImage(bitmap))
                {
                    // draw bitmap on canvas
                    canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    canvas.DrawImage(image, 0, 0, image.Width, image.Height);
                    canvas.Save();

                    // convert canvas to freeimage
                    dib = FreeImage.CreateFromBitmap(bitmap);
                }
            }
            return(dib);
        }
Exemple #29
0
        public override object Process(FileInfo myInfo, string FilePath)
        {
            TextureComponent myTexture = new TextureComponent();
            FileStream       myStream  = ReadFileStream(myInfo, FilePath);
            var Result2 = FreeImage.LoadFromStream(myStream);

            myTexture.Width  = FreeImage.GetWidth(Result2);
            myTexture.Height = FreeImage.GetHeight(Result2);
            var Type = FreeImage.GetImageType(Result2);

            Debug.WriteLine("ImageType: " + Enum.GetName(typeof(FREE_IMAGE_TYPE), Type) + " was detected!");
            FreeImage.ConvertToType(Result2, FREE_IMAGE_TYPE.FIT_BITMAP, true);
            // The bits per pixel and image type may have changed
            myTexture.bpp        = FreeImage.GetBPP(Result2);
            myTexture.pitch      = (int)FreeImage.GetPitch(Result2);
            myTexture.redMask    = FreeImage.GetRedMask(Result2);
            myTexture.greenMask  = FreeImage.GetGreenMask(Result2);
            myTexture.blueMask   = FreeImage.GetBlueMask(Result2);
            myTexture.ImageBytes = new uint[(int)(myTexture.Width * myTexture.Height)];
            // Create the byte array for the data
            var Data = new byte[(int)((myTexture.Width * myTexture.Height * myTexture.bpp - 1f) / 8) + 1];

            //Converts the pixel data to bytes, do not try to use this call to switch the color channels because that only works for 16bpp bitmaps
            FreeImage.ConvertToRawBits(Data, Result2, myTexture.pitch, myTexture.bpp, myTexture.redMask, myTexture.greenMask, myTexture.blueMask, true);
            int           Count    = Vector <byte> .Count;
            float         Iterator = Data.Length - (Data.Length % Count);
            Vector <byte> Work;
            int           DestIterator = 0;

            for (int i = 0; i < Iterator; i += Count)
            {
                Work = new Vector <byte>(Data, i);
                var Result = Vector.AsVectorUInt32(Work);
                Result.CopyTo(myTexture.ImageBytes, DestIterator++);
            }


            //Array.Copy(Data, 0, myTexture.ImageBytes, 0, Data.Length);

            //FreeImage.FreeHbitmap(Result2); //TODO: FREE THE IMAGE OR LEAK
            myStream.Close();
            return(myTexture);
        }
Exemple #30
0
        public static ushort GetHeight(this FIBITMAP dib, Vector2 p)
        {
            uint ImageHeight = FreeImage.GetHeight(dib);
            uint ImageWidth  = FreeImage.GetWidth(dib);

            int scanline = (int)(ImageHeight - 1 - p.Y);

            if (scanline < 0 || scanline >= ImageHeight)
            {
                throw new Exception($"Invalid Y coordinate {p.Y}");
            }
            if (p.X < 0 || p.X >= ImageWidth)
            {
                throw new Exception($"Invalid X coordinate {p.X}");
            }
            Scanline <ushort> line = new Scanline <ushort>(dib, scanline);

            return(line.Data[(int)p.X]);
        }
Exemple #31
0
        /// <summary>
        /// Uploads an array of bytes as a texture.
        /// </summary>
        /// <param name="data">The bytes to upload.</param>
        internal override void Create(byte[] data)
        {
            FIBITMAP freeImageBitmap;

            // Put the bytes into a stream.
            using (MemoryStream stream = new MemoryStream(data))
            {
                // Get the image format and load the image as a FreeImageBitmap.
                FREE_IMAGE_FORMAT fileType = FreeImage.GetFileTypeFromStream(stream);
                freeImageBitmap = FreeImage.ConvertTo32Bits(FreeImage.LoadFromStream(stream, ref fileType));

                // Assign size.
                Size = new Vector2(FreeImage.GetWidth(freeImageBitmap), FreeImage.GetHeight(freeImageBitmap));
            }

            // Upload the texture on the GL thread.
            GLThread.ExecuteGLThread(() =>
            {
                Pointer       = GL.GenTexture();
                TextureMatrix = Matrix4.CreateOrthographicOffCenter(0, Size.X * 2, Size.Y * 2, 0, 0, 1);

                // Bind the texture.
                Bind(0);

                // Set scaling to pixel perfect.
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (float)All.Nearest);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (float)All.Nearest);

                // Create a swizzle mask to convert RGBA to BGRA which for some reason is the format FreeImage spits out above.
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleR, (int)All.Blue);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleG, (int)All.Green);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleB, (int)All.Red);
                GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureSwizzleA, (int)All.Alpha);

                // Upload the texture.
                GL.TexImage2D(TextureTarget2d.Texture2D, 0, TextureComponentCount.Rgba8, (int)Size.X, (int)Size.Y, 0, PixelFormat.Rgba, PixelType.UnsignedByte, FreeImage.GetBits(freeImageBitmap));

                Helpers.CheckError("uploading texture");

                // Cleanup FreeImage object.
                FreeImage.Unload(freeImageBitmap);
            });
        }