Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > статус обработки изображения


Автор: godvinn 13.4.2009, 14:41
Здравствуйте. Есть у меня следующий вопрос:

есть у меня код(это с библиотеки AForse) для применения фильтра к изображению     

Код

 GaussianBlur filter = new GaussianBlur();
 filter.Sigma = 15;
 filter.Size = 15;
 filteredImg = filter.Apply(img);
 pictureBox.Image = filteredImg;


но он немного работает с замедлением, как мне сделать чтобы когда пользователь применения эффект 
выводился ProgressBar и показівал статус обработки изображения и когда полностью обработаеться изображение он исчезал *?  

Автор: -Mikle- 13.4.2009, 16:36
Я не работал с этой библиотекой, но если в ней предусмотренных средств нет, то верным решением будет показать пользователю окошко с надписью: "Это может занять некоторое время, пожалуйста ждите..." и разместить анимированную иконку на форме или прогрессбар со свойством установленным в Marquie. А filter.Apply(img) запустить в отдельном потоке с синхронизацией с основным потоком.

Автор: godvinn 13.4.2009, 16:57
-Mikle-, а пример привести можешь*?  smile 

Автор: -Mikle- 13.4.2009, 20:00
Да, конечно.
Создаешь форму и называешь ее LongAction. Далее кидаешь на нее Label с нужной надписью и ProgressBar. В дизайнере у ProgressBar ставишь свойство Style = Marquee. потом вставляешь статический метод Start в форму:
Код

    public partial class LongAction : Form
    {
        // метод Start
        public static void Start(Action action)
        {
            LongAction form = new LongAction();
            action.BeginInvoke(delegate { form.Invoke((Action)delegate { form.Close(); }); }, null);
            form.ShowDialog();
        }

        // это уже есть по умолчанию
        public LongAction()
        {
            InitializeComponent();
        }
    }


И все! Использовать можно так:
Код

        private void button1_Click(object sender, EventArgs e)
        {
            GaussianBlur filter = new GaussianBlur();
            filter.Sigma = 15;
            filter.Size = 15;

            LongAction.Start(
                delegate
                {
                    filteredImg = filter.Apply(img);
                });

            pictureBox.Image = filteredImg;
        }

Автор: godvinn 13.4.2009, 21:20
-Mikle-,  я сделал не форму а AboutBox

а можно ли убрать в  AboutBox кнопку закрытия (смотрите прикреплением файле ).
Потому что если пользователь закрывает AboutBox вываливаеться ошибка. 
Если можно то подскажите как *?  

Автор: -Mikle- 13.4.2009, 22:45
AboutBox это тоже форма, причем ничем не отличающаяся от просто формы. И, как у любой другой формы, в дизайнере свойство ControlBox = False выключит твою кнопочку.

Автор: godvinn 13.4.2009, 23:17
-Mikle-, спасибо огромное! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)