Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись и чтение параметров изображения в текстовый 
V
    Опции темы
Game1024
Дата 14.1.2010, 04:20 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.1.2010

Репутация: нет
Всего: нет



Здравствуйте.
Создаю приложение, которое способно загружать изображение,  изменять его параметры путем перемещения скроллов, сохранять параметры в текстовый файл и считывать их оттуда.

Исходный код 
Скрытый текст
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace arbuzzz
{
    
    public partial class Form1 : Form
    {
        double aspect;
        string image_path;
    
        public Form1()
        {
            InitializeComponent();
            pictureBox1.Left = 0;
            pictureBox1.Top = 0;
            pictureBox1.Width = 200;
            pictureBox1.Height = 150;
            pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
            hScrollBar3.Maximum = this.Size.Width;
            hScrollBar4.Maximum = this.Size.Width;

        }

        private void оПрограммеToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("hello world?");
        }

        private void открытьИзображениеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog openfiledialog = new OpenFileDialog();
            openfiledialog.Filter = "png files (*.png)|*.png|All files (*.*)|*.*";
            openfiledialog.FilterIndex = 2;
            openfiledialog.RestoreDirectory = true;
            if (openfiledialog.ShowDialog() == DialogResult.OK)
            {
                if (openfiledialog.OpenFile() != null)
                {
                    pictureBox1.Image = System.Drawing.Image.FromFile(openfiledialog.FileName);
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                    hScrollBar2.Maximum = pictureBox1.Height * 2;
                    hScrollBar2.Value = pictureBox1.Height;
                    textBox2.Text =  pictureBox1.Height.ToString();
                    hScrollBar1.Maximum = pictureBox1.Width * 2;
                    hScrollBar1.Value = pictureBox1.Width;
                    textBox1.Text = pictureBox1.Width.ToString();
                    aspect = Convert.ToDouble(pictureBox1.Image.Width) / Convert.ToDouble(pictureBox1.Image.Height);
                    image_path = openfiledialog.FileName.ToString();
                    
                    pictureBox1.Width = hScrollBar1.Value;
                    textBox1.Text = pictureBox1.Width.ToString();
                    pictureBox1.Height = hScrollBar2.Value;
                    textBox2.Text = pictureBox1.Height.ToString();

                    if (checkBox1.Checked)
                    {
                        pictureBox1.Width = Convert.ToInt16(hScrollBar1.Value / aspect);
                        textBox1.Text = pictureBox1.Width.ToString();
                        hScrollBar1.Value = pictureBox1.Width;

                        pictureBox1.Height = Convert.ToInt16(hScrollBar2.Value / aspect);
                        textBox2.Text = pictureBox1.Height.ToString();
                        hScrollBar2.Value = pictureBox1.Height;  

                    }

                }
            }
            

        }

        private void открытьФайлПараметровToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.IO.Stream myStream;
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog.FilterIndex = 1;
            openFileDialog.RestoreDirectory = true;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                if ((myStream = openFileDialog.OpenFile()) != null)
                {
                    System.IO.StreamReader rw = new System.IO.StreamReader(myStream);
                    string line;
                    while ((line = rw.ReadLine()) != null)
                    {
                        listBox1.Items.Add(line);
                        //Если в строке есть параметр Path, то извлекаем его значение и загружаем изображение
                        if (line.IndexOf("Path=") != -1)
                        {
                            pictureBox1.Image = System.Drawing.Image.FromFile(line.Substring(5));
                            image_path = line.Substring(5);
                            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                            hScrollBar2.Maximum = pictureBox1.Height * 2;
                            hScrollBar2.Value = pictureBox1.Height;
                            textBox2.Text = pictureBox1.Height.ToString();
                            hScrollBar1.Maximum = pictureBox1.Width * 2;
                            hScrollBar1.Value = pictureBox1.Width;
                            textBox1.Text = pictureBox1.Width.ToString();
                            aspect = Convert.ToDouble(pictureBox1.Image.Width) / Convert.ToDouble(pictureBox1.Image.Height);

                            pictureBox1.Width = hScrollBar1.Value;
                            textBox1.Text = pictureBox1.Width.ToString();
                            pictureBox1.Height = hScrollBar2.Value;
                            textBox2.Text = pictureBox1.Height.ToString();
                        }
                        if (line.IndexOf("Width=") != -1)
                        {

                        }
                    }
                }
            }
        }

        private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
             pictureBox1.Width = hScrollBar1.Value;
             textBox1.Text = pictureBox1.Width.ToString();
                        
        }

        private void hScrollBar2_Scroll(object sender, ScrollEventArgs e)
        {
             pictureBox1.Height = hScrollBar2.Value;
             textBox2.Text = pictureBox1.Height.ToString();

        }

        private void сохранитьПараметрыToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.IO.Stream myStream;
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "Txt files (*.txt)|*.txt|All files (*.*)|*.*";
            saveFileDialog.FilterIndex = 1;
            saveFileDialog.RestoreDirectory = true;
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
              {
               if ((myStream = (System.IO.FileStream)saveFileDialog.OpenFile()) != null)
                 {
                  System.IO.StreamWriter sw = new System.IO.StreamWriter(myStream);
                  //сохраняем параметры
                  sw.WriteLine("Path = C:\arbuz.txt");
                  sw.WriteLine("Width = {0}",pictureBox1.Width.ToString());
                  sw.WriteLine("Height = {0}", pictureBox1.Height.ToString());
                  sw.WriteLine("Top = {0}", pictureBox1.Top.ToString());
                  sw.WriteLine("Left = {0}",  pictureBox1.Left.ToString());
                  sw.WriteLine("SaveAspect = {0}", aspect.ToString());
                  sw.Close();
                 }
                }
                    }
                              
    }
}


Загвоздка произошла в  функции для чтения файла параметров.
// Если в строке есть параметр Width 
if (line.IndexOf("Width=") != -1)
// то читаем его и назначаем

 {
   }
//Если в строке есть параметр Height, то читаем его и назначаем
и т.д.
Каким образом прочитать значение Width из файла назначить его?

Также где-то должен быть дублирующаяся часть кода (вероятно настройки скроллов Width.Maximum, Height.Maximum, Height.Value, Width.Value, aspect , pictureBox1.SizeMode)

Буду благодарен за ответы.




Это сообщение отредактировал(а) Game1024 - 14.1.2010, 15:40
PM MAIL   Вверх
Экскалупатор
Дата 14.1.2010, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Game1024, привет.
 smile 
во-первых, тот факт что ты недавно на форуме не отменяет необходимость оборачивания кода в теги.
во-вторых, ты б разобрался со структурой твоей программы. это просто жесткач какой-то. все вперемешку. русские названия. вот ты же сам пишешь "функция чтения файла" а где она? правильно! в обработчике события! ей там самое место!

Цитата(Game1024 @  14.1.2010,  03:20 Найти цитируемый пост)
Каким образом прочитать значение Width из файла назначить его?

теперь по вопросу. я не совсем понял что тебе нужно, но думаю что ты не знаешь как прочитать число. т.е. параметр у тебя записан числом. тебе нужно прочитать его как строку, а потом конвертировать это в число.
мне кажется все это проще было бы реализовать, храня параметры не просто в текстовом файле, а в XML.


PM MAIL ICQ   Вверх
Game1024
Дата 14.1.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.1.2010

Репутация: нет
Всего: нет



В спойлер не хочет сворачиваться.
По вопросу - функция открыть файл параметров и и есть функция чтения.
При нажатии на кнопку открывает файл,считывает в нем параметры и применяет их к изображению.
Конкретно загвоздка такая: в файле есть строка
Width=345.
Мне нужно прочитать значение и назначить его.
if (line.IndexOf("Width=") != -1)
//далее читаем и назначаем.Каким образом можно прочитать значение "345"
PM MAIL   Вверх
Экскалупатор
Дата 14.1.2010, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



можно так:
Код

string str = "Width=345";
            string str0 = "Width=";
            string strResult = str.Remove(0, str0.Length);
            int i = Int32.Parse(strResult);

PM MAIL ICQ   Вверх
newbieBH
Дата 14.1.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 16.9.2008

Репутация: нет
Всего: нет



если я правильно понял то что нужно, то можно считать так ... 
Код

            int value;
            string[] str = line.Split('=');
            if (int.TryParse(str[1].Trim(), out value))
            {
            }

PM MAIL   Вверх
Game1024
Дата 14.1.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.1.2010

Репутация: нет
Всего: нет



Цитата(Экскалупатор @  14.1.2010,  17:52 Найти цитируемый пост)
можно так:КодincludeSyntax('csharp');string str = "Width=345";            string str0 = "Width=";            string strResult = str.Remove(0, str0.Length);            int i = Int32.Parse(strResult);

дальше,если я правильно понял, присваиваем i = pictureBox1.Width,и
textBox1.Text = pictureBox1.Width.ToString();  
? 
(в textBox1.Text отображается width изображения)

Но все  равно не работает
PM MAIL   Вверх
Экскалупатор
Дата 14.1.2010, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Цитата(Game1024 @  14.1.2010,  19:28 Найти цитируемый пост)
дальше,если я правильно понял, присваиваем i = pictureBox1.Width,и
textBox1.Text = pictureBox1.Width.ToString();  
? 
(в textBox1.Text отображается width изображения)

Но все  равно не работает 


эээ... я не понял...

это что? почему ты переменной i присваиваешь ширину контрола? надо ноборот:
Код

pictureBox1.Width = i; 
textBox1.Text = i.ToString(); 

PM MAIL ICQ   Вверх
Game1024
Дата 14.1.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.1.2010

Репутация: нет
Всего: нет



Цитата(Экскалупатор @  14.1.2010,  21:30 Найти цитируемый пост)
дальше,если я правильно понял, присваиваем i = pictureBox1.Width,иtextBox1.Text = pictureBox1.Width.ToString();  ? (в textBox1.Text отображается width изображения)Но все  равно не работает эээ... я не понял...это что? почему ты переменной i присваиваешь ширину контрола? надо ноборот:КодincludeSyntax('csharp');pictureBox1.Width = i; textBox1.Text = i.ToString(); 


Лишь присваивает значение textBox и изображению,но не считывает это значение из файла

Это сообщение отредактировал(а) Game1024 - 14.1.2010, 22:56
PM MAIL   Вверх
Экскалупатор
Дата 14.1.2010, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Game1024, спасибо. но если честно все это мягко говоря шило. твоя программа похожа на программу человека который изучает язык первую неделю. почитай про ООП. про рефакторинг. конкретно для этой программы очень бы хорошо было использовать XML. выполнять весь код прямо в обработчике это не айс. это будет выглядеть нормально только для тебя и только в том случае если у тебя всего три четыре обработчика, и только одна форма. в остальных случаях это все равно что усложнять себе жизнь.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.