示例#1
0
        private void btnLoadFilter_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Title  = "Select the Image Filter to load";
            ofd.Filter = "Image Filter Files(*.xbmp)|*.xbmp";

            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string xmlString = File.ReadAllText(ofd.FileName, Encoding.UTF8);

                BitmapFilterData tmpFilter = BitmapFilterData.XmlDeserialize(xmlString);

                if (tmpFilter == null)
                {
                    MessageBox.Show("The selected file could not be processed!", "Filter File Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                filterData = tmpFilter;

                PopulateControls();

                RenderOverlayBitmap();
            }
        }
示例#2
0
文件: ExtBitmap.cs 项目: hosj93/FYP2
        public static Bitmap BlendImage(this Bitmap baseImage, Bitmap overlayImage, BitmapFilterData filterData)
        {
            BitmapData baseImageData = baseImage.LockBits(new Rectangle(0, 0, baseImage.Width, baseImage.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            byte[] baseImageBuffer = new byte[baseImageData.Stride * baseImageData.Height];

            Marshal.Copy(baseImageData.Scan0, baseImageBuffer, 0, baseImageBuffer.Length);

            BitmapData overlayImageData = overlayImage.LockBits(new Rectangle(0, 0, overlayImage.Width, overlayImage.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            byte[] overlayImageBuffer = new byte[overlayImageData.Stride * overlayImageData.Height];

            Marshal.Copy(overlayImageData.Scan0, overlayImageBuffer, 0, overlayImageBuffer.Length);

            float sourceBlue  = 0;
            float sourceGreen = 0;
            float sourceRed   = 0;

            float overlayBlue  = 0;
            float overlayGreen = 0;
            float overlayRed   = 0;

            for (int k = 0; k < baseImageBuffer.Length && k < overlayImageBuffer.Length; k += 4)
            {
                sourceBlue  = (filterData.SourceBlueEnabled ? baseImageBuffer[k] * filterData.SourceBlueLevel : 0);
                sourceGreen = (filterData.SourceGreenEnabled ? baseImageBuffer[k + 1] * filterData.SourceGreenLevel : 0);
                sourceRed   = (filterData.SourceRedEnabled ? baseImageBuffer[k + 2] * filterData.SourceRedLevel : 0);

                overlayBlue  = (filterData.OverlayBlueEnabled ? overlayImageBuffer[k] * filterData.OverlayBlueLevel : 0);
                overlayGreen = (filterData.OverlayGreenEnabled ? overlayImageBuffer[k + 1] * filterData.OverlayGreenLevel : 0);
                overlayRed   = (filterData.OverlayRedEnabled ? overlayImageBuffer[k + 2] * filterData.OverlayRedLevel : 0);

                baseImageBuffer[k]     = CalculateColorComponentBlendValue(sourceBlue, overlayBlue, filterData.BlendTypeBlue);
                baseImageBuffer[k + 1] = CalculateColorComponentBlendValue(sourceGreen, overlayGreen, filterData.BlendTypeGreen);
                baseImageBuffer[k + 2] = CalculateColorComponentBlendValue(sourceRed, overlayRed, filterData.BlendTypeRed);
            }

            Bitmap     bitmapResult    = new Bitmap(baseImage.Width, baseImage.Height, PixelFormat.Format32bppArgb);
            BitmapData resultImageData = bitmapResult.LockBits(new Rectangle(0, 0, bitmapResult.Width, bitmapResult.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            Marshal.Copy(baseImageBuffer, 0, resultImageData.Scan0, baseImageBuffer.Length);

            bitmapResult.UnlockBits(resultImageData);
            baseImage.UnlockBits(baseImageData);
            overlayImage.UnlockBits(overlayImageData);

            return(bitmapResult);
        }
示例#3
0
        private void btnSaveFilter_Click(object sender, EventArgs e)
        {
            if (filterData == null)
            {
                return;
            }

            SaveFileDialog sfd = new SaveFileDialog();

            sfd.Title        = "Specify a file name and file path";
            sfd.Filter       = "Image Filter Files(*.xbmp)|*.xbmp";
            sfd.AddExtension = true;

            if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string xmlString = BitmapFilterData.XmlSerialize(filterData);

                File.WriteAllText(sfd.FileName, xmlString, Encoding.UTF8);
            }
        }
示例#4
0
文件: ExtBitmap.cs 项目: hosj93/FYP2
        public static BitmapFilterData XmlDeserialize(string xmlString)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(BitmapFilterData));
            MemoryStream  memoryStream  = new MemoryStream(Encoding.UTF8.GetBytes(xmlString));

            XmlReader xmlReader = XmlReader.Create(memoryStream);

            BitmapFilterData filterData = null;

            if (xmlSerializer.CanDeserialize(xmlReader) == true)
            {
                xmlReader.Close();
                memoryStream.Position = 0;

                filterData = (BitmapFilterData)xmlSerializer.Deserialize(memoryStream);
            }

            memoryStream.Close();
            memoryStream.Dispose();

            return(filterData);
        }
示例#5
0
文件: ExtBitmap.cs 项目: hosj93/FYP2
        public static string XmlSerialize(BitmapFilterData filterData)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(BitmapFilterData));

            XmlWriterSettings xmlSettings = new XmlWriterSettings();

            xmlSettings.Encoding = Encoding.UTF8;
            xmlSettings.Indent   = true;

            MemoryStream memoryStream = new MemoryStream();
            XmlWriter    xmlWriter    = XmlWriter.Create(memoryStream, xmlSettings);

            xmlSerializer.Serialize(xmlWriter, filterData);
            xmlWriter.Flush();

            string xmlString = xmlSettings.Encoding.GetString(memoryStream.ToArray());

            xmlWriter.Close();
            memoryStream.Close();
            memoryStream.Dispose();

            return(xmlString);
        }