示例#1
0
        public Bitmap PerspectiveTransform8bit(Bitmap srcImage, PointF2D[,] points, PerspectiveTransType type)
        {
            Bitmap     purImage = new Bitmap(srcImage.Width, srcImage.Height, PixelFormat.Format8bppIndexed);
            Rectangle  size     = new Rectangle(0, 0, srcImage.Width, srcImage.Height);
            BitmapData srcData  = srcImage.LockBits(size, ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
            BitmapData purData  = purImage.LockBits(size, ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);

            unsafe
            {
                float[] linkPoints = new float[50];
                for (int row = 0; row < 5; row++)
                {
                    for (int col = 0; col < 10; col += 2)
                    {
                        int fixIndex = row * 10 + col;

                        linkPoints[fixIndex]     = points[row, (col >> 1)].X == srcImage.Width + 10 ? points[row, (col >> 1)].X - 11 : points[row, (col >> 1)].X - 10;
                        linkPoints[fixIndex + 1] = points[row, (col >> 1)].Y == srcImage.Height + 10 ? points[row, (col >> 1)].Y - 11 : points[row, (col >> 1)].Y - 10;
                    }
                }
                IntPtr srcPtr = srcData.Scan0;
                IntPtr purPtr = purData.Scan0;
                ivcPerspectiveTransform8bit(srcPtr, purPtr
                                            , srcImage.Width, srcImage.Height
                                            , linkPoints
                                            , (int)type);
            }

            purImage.Palette = _colorPalette;
            srcImage.UnlockBits(srcData);
            purImage.UnlockBits(purData);
            return(purImage);
        }
示例#2
0
        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            string type = ((CheckBox)sender).Text;

            if (type == "鄰近" && ((CheckBox)sender).Checked)
            {
                _transType        = PerspectiveTransType.TRANS_NEAREST;
                checkBox3.Checked = false;
                checkBox4.Checked = false;
            }
            else if (type == "雙線" && ((CheckBox)sender).Checked)
            {
                _transType        = PerspectiveTransType.TRANS_LINEAR;
                checkBox2.Checked = false;
                checkBox3.Checked = false;
            }
            else if (((CheckBox)sender).Checked)
            {
                _transType        = PerspectiveTransType.TRANS_BICUBIC;
                checkBox2.Checked = false;
                checkBox4.Checked = false;
            }
        }