コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: Targa.cs プロジェクト: yujintong/bni-icon-builder
        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();
        }
コード例 #4
0
ファイル: GDIBitmap.cs プロジェクト: polytronicgr/netrix
        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);
        }
コード例 #5
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);
        }
コード例 #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());
        }
コード例 #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);
        }
コード例 #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);
                    }
                }
            }));
        }
コード例 #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;
            }
        }
コード例 #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);
            }
        }
コード例 #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;
     }
 }
コード例 #12
0
        /// <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);
        }
コード例 #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);
     }
 }
コード例 #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;
        }
コード例 #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);
        }
コード例 #16
0
ファイル: Base64Image.cs プロジェクト: steamypassion/Compiler
        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;
                }
                }
            }
        }
コード例 #17
0
ファイル: GDIBitmap.cs プロジェクト: westybsa/MP.LSharp
        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();
        }
コード例 #18
0
ファイル: Base64Image.cs プロジェクト: steamypassion/Compiler
        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);
                }
            }
        }
コード例 #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);
        }
コード例 #20
0
ファイル: Targa.cs プロジェクト: yujintong/bni-icon-builder
        /// <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);
        }
コード例 #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));
        }
コード例 #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);
        }
コード例 #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);
        }
コード例 #24
0
        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);
            }
        }
コード例 #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();
        }
コード例 #26
0
ファイル: Program.cs プロジェクト: FlechitUp/GraphicComputing
        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);
        }
コード例 #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);
            }
        }
コード例 #28
0
ファイル: Targa.cs プロジェクト: yujintong/bni-icon-builder
        /// <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);
        }
コード例 #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);
        }
コード例 #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]);
        }
コード例 #31
0
ファイル: Texture.cs プロジェクト: CharlieScarver/Emotion
        /// <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);
            });
        }