Работа с потоками FileStream... - C#
Формулировка задачи:
Всем привет!
1. Я записываю в .txt-файл изображение.
2. После чего я читаю этот .txt в строку:
3. Далее создаю массив типа byte и записываю туда все байты из текста:
4. Вот теперь мне нужно вывести изображение в PictureBox:
Таким образом изображение выводится на PictureBox, но после этого он вписывает абракадабру в файл, после чего не является возможным снова отобразить изображение! Подскажите пожалуйста что мне нужно изменить для того чтобы всё было как нужно? Может использовать другой поток?
StreamReader SR = new StreamReader("123.txt");
string Temp = SR.ReadToEnd();
SR.Close();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]);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();Решение задачи: «Работа с потоками 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;
}