Пример #1
0
        private void hideButton_Click(object sender, EventArgs e)
        {
            saveButton.Enabled = true;

            Color tempColor;

            string tempA = "";
            string tempR = "";
            string tempG = "";
            string tempB = "";
            byte   A, R, G, B;

            containerBitmap.LockBits();

            imageBitmap.LockBits();
            char[] arr = new char[8];

            int count  = 0; //сколько пикселей контейнера просмотрено (для получения целого пикселя изображения нужно просмотреть 4 пикселя контейнера)
            int visits = 0; //сколько пикселей изображения восстановили (после каждых 256 строка ++)
            int row    = 0; //номер строки (++ после 256 предыдущих пикселей)

            for (int i = 0; i < 512; i++)
            {
                for (int j = 0; j < 512; j++)
                {
                    tempColor = containerBitmap.GetPixel(i, j);
                    tempA     = setBitsString(Convert.ToString(tempColor.A, 2));
                    imageStr += tempA[6];
                    imageStr += tempA[7];

                    tempR     = setBitsString(Convert.ToString(tempColor.R, 2));
                    imageStr += tempR[6];
                    imageStr += tempR[7];

                    tempG     = setBitsString(Convert.ToString(tempColor.G, 2));
                    imageStr += tempG[6];
                    imageStr += tempG[7];

                    tempB     = setBitsString(Convert.ToString(tempColor.B, 2));
                    imageStr += tempB[6];
                    imageStr += tempB[7];

                    if (count == 3)
                    {
                        for (int k = 0; k < 8; k++)
                        {
                            arr[k] = imageStr[k];
                        }
                        A = Convert.ToByte(new string(arr), 2);

                        for (int k = 0; k < 8; k++)
                        {
                            arr[k] = imageStr[k + 8];
                        }
                        R = Convert.ToByte(new string(arr), 2);

                        for (int k = 0; k < 8; k++)
                        {
                            arr[k] = imageStr[k + 16];
                        }
                        G = Convert.ToByte(new string(arr), 2);

                        for (int k = 0; k < 8; k++)
                        {
                            arr[k] = imageStr[k + 24];
                        }
                        B = Convert.ToByte(new string(arr), 2);


                        imageBitmap.SetPixel(row, visits, Color.FromArgb(A, R, G, B));
                        if (visits == 255)
                        {
                            row++;
                            visits = 0;
                        }
                        else
                        {
                            visits++;
                        }

                        count    = 0;
                        imageStr = "";
                    }
                    else
                    {
                        count++;
                    }
                }
            }
            imageBitmap.UnlockBits();

            containerBitmap.UnlockBits();

            reversedPictureBox.Image = imageBitmap.source;
            reversedPictureBox.Refresh();
        }
Пример #2
0
        private void hideButton_Click(object sender, EventArgs e)
        {
            saveButton.Enabled = true;

            /*   Console.WriteLine(Convert.ToString(15, 2));
            *  Console.WriteLine(Convert.ToInt32("1011", 2));*/

            imageBitmap.LockBits();
            Color tmpColor;


            int    count = 0;  //сколько пикселей контейнера изменено после того, как был взят 1 пиксель изображения (для перехода дальше нужно 4)
            int    posVal = 0; //позиция в строке из 32 символов, содержащей информацию о цвете 1 пикселя изображения
            int    visits = 0; //сколько пикселей изображения просмотрено (когда переходить на следующую строку)
            int    row = 0;    //номер строки изображения (++ после получения 256 предыдущих пикселей)
            string tempA = "";
            string tempR = "";
            string tempG = "";
            string tempB = "";
            byte   A, R, G, B;

            char[] arr = new char[8];
            containerBitmap.LockBits();
            for (int i = 0; i < 512; i++)
            {
                for (int j = 0; j < 512; j++)
                {
                    if (count == 0)
                    {
                        if (row == 256)
                        {
                            row = 0;
                        }
                        tmpColor  = imageBitmap.GetPixel(row, visits);
                        imageStr += setBitsString(Convert.ToString(tmpColor.A, 2));
                        imageStr += setBitsString(Convert.ToString(tmpColor.R, 2));
                        imageStr += setBitsString(Convert.ToString(tmpColor.G, 2));
                        imageStr += setBitsString(Convert.ToString(tmpColor.B, 2));

                        if (visits == 255)
                        {
                            row++;
                            visits = 0;
                        }
                        else
                        {
                            visits++;
                        }
                    }

                    if (count < 4)
                    {
                        tmpColor = containerBitmap.GetPixel(i, j);
                        tempA    = setBitsString(Convert.ToString(tmpColor.A, 2));
                        for (int k = 0; k < 6; k++)
                        {
                            arr[k] = tempA[k];
                        }
                        arr[6] = imageStr[posVal++];
                        arr[7] = imageStr[posVal++];
                        tempA  = new string(arr);
                        A      = Convert.ToByte(tempA, 2);

                        tempR = setBitsString(Convert.ToString(tmpColor.R, 2));
                        for (int k = 0; k < 6; k++)
                        {
                            arr[k] = tempR[k];
                        }
                        arr[6] = imageStr[posVal++];
                        arr[7] = imageStr[posVal++];
                        tempR  = new string(arr);
                        R      = Convert.ToByte(tempR, 2);

                        tempG = setBitsString(Convert.ToString(tmpColor.G, 2));
                        for (int k = 0; k < 6; k++)
                        {
                            arr[k] = tempG[k];
                        }
                        arr[6] = imageStr[posVal++];
                        arr[7] = imageStr[posVal++];
                        tempG  = new string(arr);
                        G      = Convert.ToByte(tempG, 2);

                        tempB = setBitsString(Convert.ToString(tmpColor.B, 2));
                        for (int k = 0; k < 6; k++)
                        {
                            arr[k] = tempB[k];
                        }
                        arr[6] = imageStr[posVal++];
                        arr[7] = imageStr[posVal++];
                        tempB  = new string(arr);
                        B      = Convert.ToByte(tempB, 2);


                        containerBitmap.SetPixel(i, j, Color.FromArgb(A, R, G, B));

                        if (count == 3)
                        {
                            count    = 0;
                            posVal   = 0;
                            imageStr = "";
                        }
                        else
                        {
                            count++;
                        }
                    }
                }
            }
            imageBitmap.UnlockBits();
            containerBitmap.UnlockBits();
        }