Пример #1
0
        public static Bitmap ApplyConv(Bitmap b, ConvMask m)
        {
            if (m.factor == 0)
                return b;

            Bitmap OutPutImage;
            OutPutImage = (Bitmap)b.Clone();
            BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            //BitmapData copyData=b.LockBits(new Rectangle(0,0,OutPutImage.Width,OutPutImage.Height),ImageLockMode.ReadWrite,tengahFormat.Format24bppRgb);
            BitmapData copyData = OutPutImage.LockBits(new Rectangle(0, 0, OutPutImage.Width, OutPutImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

            int stride = bData.Stride;
            int stride2 = stride * 2;

            System.IntPtr ptr = bData.Scan0;
            System.IntPtr ptrOutPut = copyData.Scan0;

            unsafe
            {
                byte* p = (byte*)(void*)ptr;
                byte* pOutPut = (byte*)(void*)ptrOutPut;

                int noffset = stride - b.Width * 3;
                int nWidth = b.Width - 2;
                int nHeight = b.Height - 2;
                int ntengah;

                for (int x = 0; x < nWidth; x++)
                    for (int y = 0; y < nHeight; y++)
                    {

                        ntengah = (((pOutPut[2] * m.atasKiri) + (pOutPut[5] * m.atasTengah) + (pOutPut[8] * m.atasKanan) +
                            (pOutPut[stride + 2] * m.tengahKiri) + (pOutPut[stride + 5] * m.tengah) + (pOutPut[stride + 8] * m.tengahKanan)
                            + (pOutPut[stride2 + 2] * m.bawahKiri) + (pOutPut[stride2 + 5] * m.bawahTengah) + (pOutPut[stride2 + 8] * m.bawahKanan)) / m.factor) + m.offset;

                        if (ntengah < 0) ntengah = 0;
                        if (ntengah > 255) ntengah = 255;
                        pOutPut[5 + stride] = (byte)ntengah;
                        ntengah = ((((pOutPut[1] * m.atasKiri) + (pOutPut[4] * m.atasTengah) +
                            (pOutPut[7] * m.atasKanan) + (pOutPut[1 + stride] * m.tengahKiri) +
                            (pOutPut[4 + stride] * m.tengah) + (pOutPut[7 + stride] * m.tengahKanan) +
                            (pOutPut[1 + stride2] * m.bawahKiri) +
                            (pOutPut[4 + stride2] * m.bawahTengah) +
                            (pOutPut[7 + stride2] * m.bawahKanan))
                            / m.factor) + m.offset);

                        if (ntengah < 0) ntengah = 0;
                        if (ntengah > 255) ntengah = 255;
                        p[4 + stride] = (byte)ntengah;

                        ntengah = ((((pOutPut[0] * m.atasKiri) + (pOutPut[3] * m.atasTengah) +
                            (pOutPut[6] * m.atasKanan) + (pOutPut[0 + stride] * m.tengahKiri) +
                            (pOutPut[3 + stride] * m.tengah) +
                            (pOutPut[6 + stride] * m.tengahKanan) +
                            (pOutPut[0 + stride2] * m.bawahKiri) +
                            (pOutPut[3 + stride2] * m.bawahTengah) +
                            (pOutPut[6 + stride2] * m.bawahKanan))
                            / m.factor) + m.offset);

                        if (ntengah < 0) ntengah = 0;
                        if (ntengah > 255) ntengah = 255;
                        p[3 + stride] = (byte)ntengah;

                        p += 3;
                        pOutPut += 3;
                    }

                p += noffset;
                pOutPut += noffset;
            }

            b.UnlockBits(bData);
            OutPutImage.UnlockBits(copyData);

            return OutPutImage;
        }
Пример #2
0
 private void Convolution_Click(object sender, EventArgs e)
 {
     if (original.Image == null)
     {
         MessageBox.Show("Load Gambar Terlebih Dahulu","Incomplete Procedure Detected",MessageBoxButtons.OK);
     }
     else
     {
         ConvMask mask = new ConvMask();
         //Convolution cv = new Convolution();
         mask.setAll(1);
         result.Image = Konvolusi.ApplyConv(new Bitmap(original.Image), mask);
     }
 }
Пример #3
0
        public static Bitmap ApplyConv(Bitmap b, ConvMask m)
        {
            if (m.factor == 0)
            {
                return(b);
            }

            Bitmap OutPutImage;

            OutPutImage = (Bitmap)b.Clone();
            BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            //BitmapData copyData=b.LockBits(new Rectangle(0,0,OutPutImage.Width,OutPutImage.Height),ImageLockMode.ReadWrite,tengahFormat.Format24bppRgb);
            BitmapData copyData = OutPutImage.LockBits(new Rectangle(0, 0, OutPutImage.Width, OutPutImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

            int stride  = bData.Stride;
            int stride2 = stride * 2;

            System.IntPtr ptr       = bData.Scan0;
            System.IntPtr ptrOutPut = copyData.Scan0;

            unsafe
            {
                byte *p       = (byte *)(void *)ptr;
                byte *pOutPut = (byte *)(void *)ptrOutPut;

                int noffset = stride - b.Width * 3;
                int nWidth  = b.Width - 2;
                int nHeight = b.Height - 2;
                int ntengah;

                for (int x = 0; x < nWidth; x++)
                {
                    for (int y = 0; y < nHeight; y++)
                    {
                        ntengah = (((pOutPut[2] * m.atasKiri) + (pOutPut[5] * m.atasTengah) + (pOutPut[8] * m.atasKanan) +
                                    (pOutPut[stride + 2] * m.tengahKiri) + (pOutPut[stride + 5] * m.tengah) + (pOutPut[stride + 8] * m.tengahKanan)
                                    + (pOutPut[stride2 + 2] * m.bawahKiri) + (pOutPut[stride2 + 5] * m.bawahTengah) + (pOutPut[stride2 + 8] * m.bawahKanan)) / m.factor) + m.offset;

                        if (ntengah < 0)
                        {
                            ntengah = 0;
                        }
                        if (ntengah > 255)
                        {
                            ntengah = 255;
                        }
                        pOutPut[5 + stride] = (byte)ntengah;
                        ntengah             = ((((pOutPut[1] * m.atasKiri) + (pOutPut[4] * m.atasTengah) +
                                                 (pOutPut[7] * m.atasKanan) + (pOutPut[1 + stride] * m.tengahKiri) +
                                                 (pOutPut[4 + stride] * m.tengah) + (pOutPut[7 + stride] * m.tengahKanan) +
                                                 (pOutPut[1 + stride2] * m.bawahKiri) +
                                                 (pOutPut[4 + stride2] * m.bawahTengah) +
                                                 (pOutPut[7 + stride2] * m.bawahKanan))
                                                / m.factor) + m.offset);

                        if (ntengah < 0)
                        {
                            ntengah = 0;
                        }
                        if (ntengah > 255)
                        {
                            ntengah = 255;
                        }
                        p[4 + stride] = (byte)ntengah;

                        ntengah = ((((pOutPut[0] * m.atasKiri) + (pOutPut[3] * m.atasTengah) +
                                     (pOutPut[6] * m.atasKanan) + (pOutPut[0 + stride] * m.tengahKiri) +
                                     (pOutPut[3 + stride] * m.tengah) +
                                     (pOutPut[6 + stride] * m.tengahKanan) +
                                     (pOutPut[0 + stride2] * m.bawahKiri) +
                                     (pOutPut[3 + stride2] * m.bawahTengah) +
                                     (pOutPut[6 + stride2] * m.bawahKanan))
                                    / m.factor) + m.offset);

                        if (ntengah < 0)
                        {
                            ntengah = 0;
                        }
                        if (ntengah > 255)
                        {
                            ntengah = 255;
                        }
                        p[3 + stride] = (byte)ntengah;

                        p       += 3;
                        pOutPut += 3;
                    }
                }

                p       += noffset;
                pOutPut += noffset;
            }

            b.UnlockBits(bData);
            OutPutImage.UnlockBits(copyData);

            return(OutPutImage);
        }