Bitmap.Save качество

Привет всем! Есть png файл с изображением, нужно получить альфа-маску. Код:
    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private Image imgPNG;        private void Form1_Load(object sender, EventArgs e)        {            // оригинал            imgPNG = Image.FromFile("C:\\4-0.png");            // выводим на форме            pictureBox1.Image = imgPNG;            // для обработки            Bitmap bmp = new Bitmap("C:\\4-0.png");            BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),                    ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);            unsafe {                byte *pxData = (byte*)bmpData.Scan0;                for (int j = 0; j < bmpData.Height; ++j) {                    for (int i = 0; i < bmpData.Width; ++i) {                        byte alpha = *(pxData + 3);                        if (alpha > 0) {                            *(pxData + 0) = 255;                            *(pxData + 1) = 255;                            *(pxData + 2) = 255;                            *(pxData + 3) = alpha;                        }                        if (alpha == 0) {                            *(pxData + 0) = 0;                            *(pxData + 1) = 0;                            *(pxData + 2) = 0;                            *(pxData + 3) = 255;                        }                        pxData += 4;                    }                }            }            // unlock bits            bmp.UnlockBits(bmpData);            // saving file            FileStream myFileOut = new FileStream("c:\\image.png", FileMode.Create);            bmp.Save(myFileOut, ImageFormat.Png);            результат обработки выводим на форму рядышком  оригиналом            pictureBox2.Image = bmp;            myFileOut.Close();                    }    }
Результат на форме:Результат в файле:Как можно увидеть на обоих рисунках результат разный. Почему в файле появились "зубчики" по контуру? Как можно исправить? Может для кого-то это очевидно, но я впервые пишу на шарпе, так что по шапке не бить ) Оч критично.Спасибо
3 ответа

Вместо
if (alpha > 0) {    *(pxData + 0) = 255;    *(pxData + 1) = 255;    *(pxData + 2) = 255;    *(pxData + 3) = alpha;}
напиши
if (alpha > 0) {    *(pxData + 0) = alpha;    *(pxData + 1) = alpha;    *(pxData + 2) = alpha;    *(pxData + 3) = alpha;}


Вместо
if (alpha > 0) {    *(pxData + 0) = 255;    *(pxData + 1) = 255;    *(pxData + 2) = 255;    *(pxData + 3) = alpha;}
напиши
if (alpha > 0) {    *(pxData + 0) = alpha;    *(pxData + 1) = alpha;    *(pxData + 2) = alpha;    *(pxData + 3) = alpha;}
В новом варианте контур (там полу-прозрачность для сглаживания) станет серым с прозрачностью вместо белого с прозрачностью - на скорость не влияет, просто переход от белого к черному стал плавнее. Да, смотрится в файле лучше. Но почему при сохранении в первичном случае результат другой? Как получить в файле то, что на форме? Пните в верном направлении.


ИМХО PictureBox перед выводом автоматически применяет к полученной картинке интерполяцию, а сохраняет в png-файл он (PictureBox) как раз то что хранится в свойстве Image. Как сохранить интерполированную картинку я, честно говоря, не знаю.