Работа с потоками FileStream... - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет! 1. Я записываю в .txt-файл изображение. 2. После чего я читаю этот .txt в строку:
StreamReader SR = new StreamReader("123.txt");
string Temp = SR.ReadToEnd();
SR.Close();
3. Далее создаю массив типа byte и записываю туда все байты из текста:
string[] SplitedTemp = Temp.Split('|');
byte[] MasByte = new byte[SplitedTemp.Length - 1];
for (int i = 0; i < MasByte.Length; i++)
     MasByte[i] = Convert.ToByte(SplitedTemp[i]);
4. Вот теперь мне нужно вывести изображение в PictureBox:
FileStream FS = new FileStream("123.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
for (int i = 0; i < MasByte.Length; i++)
      FS.WriteByte(MasByte[i]);
pictureBox1.Image = new Bitmap(FS);
FS.Close();
Таким образом изображение выводится на PictureBox, но после этого он вписывает абракадабру в файл, после чего не является возможным снова отобразить изображение! Подскажите пожалуйста что мне нужно изменить для того чтобы всё было как нужно? Может использовать другой поток?

Решение задачи: «Работа с потоками FileStream...»

textual
Листинг программы
public static Bitmap GrayScale(Bitmap bmp)
        {
            try
            {
                // Lock the bitmap's bits.
                Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
 
                System.Drawing.Imaging.BitmapData bmpData =
                    bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
                    bmp.PixelFormat);
 
                // получение адреса первой строки
                IntPtr ptr = bmpData.Scan0;
 
                // объявление байтового массива размером с изображение
                int bytes = bmpData.Stride * bmp.Height;
                byte[] rgbValues = new byte[bytes];
 
                // копирование матрицы изображения в массив
                System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
 
                //перевод в серое
                for (int counter = 0; counter < rgbValues.Length; counter += 4)
                {
                    int x = (int)(0.3 * ((int)rgbValues[counter]) + 0.59 * ((int)rgbValues[counter + 1]) + 0.11 * ((int)rgbValues[counter + 2]));
                    rgbValues[counter] = rgbValues[counter + 1] = rgbValues[counter + 2] = (byte)x;
                }                
 
                //копирование матрицы обратнов изображение
                System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
 
                // Unlock the bits.
                bmp.UnlockBits(bmpData);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
 
            return bmp;
 
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5