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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с Bitmap 
:(
    Опции темы
chudak
Дата 24.1.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте жители Винграда smile

никак немогу найти ответ на вопрос:
можно ли вообще отчистить битма?
мне нужно к ScrollBar прицепить панель с линейкой!!!

public void OnPaint(object sender, PaintEventArgs e)
        {
 
            RulerHeight_V = bmp_VH;
            RulerHeight_H = bmp_HH;
            DrawRuler_V(g_V);
            DrawRuler_H(g_H);
      }
где  DrawRuler_V это метод, в котором рисуется линейка,
но мне нужно что она при перемещении скроллбара как бы перемещалась, тоесть перерисовывалась с новыми стартовыми и конечными делениями!!!

private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            st_V = vScrollBar1.Value;
            panel4.Invalidate();
        }

st_V - это стартовое значение, тоесть с какого деления начинать линейку!!!

а получается что линейкане перемещается я закрашивается новыми значениями, при каждом движении скроллбара новый слой линеек!!!

помогите с ситуацией!!!
PM MAIL   Вверх
farad
Дата 24.1.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вызывай Invalidate или рисуй линейку средствами класса ControlPaint - инверсными линиями, тогда можно стереть изображение повторной отисовкой его на старом месте
PM MAIL   Вверх
chudak
Дата 24.1.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Вызывай Invalidate 

так а толку перерисовавыть если битмап засаряется????

а как вообще правильно это сделать???
ведь должен быть правильный путь???
PM MAIL   Вверх
farad
Дата 24.1.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(chudak @  24.1.2008,  14:53 Найти цитируемый пост)
так а толку перерисовавыть если битмап засаряется????а как вообще правильно это сделать???
 а из приведенного кода вообще ничего не понятно. Удаляй битмап и создавай новый.

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


Шустрый
*


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

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



вот весь код который я умудрился состряпать по этой теме!!!
посмотрите, может вообще не стоит над ним сидеть и нужно переделать подругому всё!!! 

public partial class Form1 : Form
    {
        Bitmap bmp_V;
        Graphics g_V;
        int bmp_VW=50;
        int bmp_VH=1000;
        float st_V = 1;
        int RulerHeight_V;
        int Calibration=20;
        
        public Form1()
        {
            InitializeComponent();
            bmp_V = new Bitmap(bmp_VW, bmp_VH);
            g_V = Graphics.FromImage(bmp_V);
            
            this.Paint += new System.Windows.Forms.PaintEventHandler(OnPaint);
            Invalidate();
        }

        public void OnPaint(object sender, PaintEventArgs e)
        {
            
            RulerHeight_V = 100;
            DrawRuler_V(g_V);
            this.panel4.BackgroundImage = bmp_V;
        }
   
        
        private void DrawRuler_V(Graphics g)
        {

                g_V.FillRectangle(Brushes.LightGray , ClientRectangle);
                float PixelsPerInch = (float)Calibration;
                int count = 1;

                for (float i = st_V; i < (float)PixelsPerInch * RulerHeight_V; i++)
                {

                     if ((i % (PixelsPerInch)) == 0)
                     {
                          g_V.DrawLine(Pens.Black, 0, i, 15, i);

                          g_V.DrawString(count.ToString(), new Font("Arial", 12), Brushes.Black, 15, i, new StringFormat());count++;
                     }
                     else if (((i*2) % ((PixelsPerInch))) == 0)
                     {
                          g_V.DrawLine(Pens.Black, 0, i, 10, i);
                     }
                      
                 }
            }


              private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            st_V = vScrollBar1.Value;
            panel4.Invalidate();
        }

    }
PM MAIL   Вверх
farad
Дата 24.1.2008, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



если ты рисуешь на панели, то логично обрабатывать OnPaint панели, а не формы. Хотя сдается мне сдесь он не нужен. По моему достаточно поместить следующий код в обработчик vScrollBar1_Scroll
Код

            if (panel4.BackgroundImage != null)
            {
                panel4.BackgroundImage.Dispose();
            }
            st_V = vScrollBar1.Value;
            panel4.BackgroundImage = new Bitmap(bmp_VW, bmp_VH);
            using (Graphics grf = Graphics.FromImage(panel4.BackgroundImage))
            {
                DrawRuler_V(grf);
            }
            panel4.Invalidate();
при этом bmp_V и g_V можно вообще выкинуть

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


Шустрый
*


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

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



хм...
теперь он пишет "Parameter is not valid" на 
Application.Run(new Form1());

тоже непойму почему!!!
PM MAIL   Вверх
mr.DUDA
Дата 25.1.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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




M
mr.DUDA
chudak, используем кнопку "Код" для оформления кода!



--------------------
user posted image
PM MAIL WWW   Вверх
chudak
Дата 25.1.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



хорошо!!!!
а почему всёже такая ошибка???
из за чего возникла???
немогу понять!!!
вроде всё правильно!!!

PM MAIL   Вверх
mr.DUDA
Дата 25.1.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Возможно рушится конструктор Form1.


--------------------
user posted image
PM MAIL WWW   Вверх
chudak
Дата 25.1.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



но это появилось после того как вставил код foradа

Код

 if (panel4.BackgroundImage != null)
            {
                panel4.BackgroundImage.Dispose();
            }
            st_V = vScrollBar1.Value;
            panel4.BackgroundImage = new Bitmap(bmp_VW, bmp_VH);
            using (Graphics grf = Graphics.FromImage(panel4.BackgroundImage))
            {
                DrawRuler_V(grf);
            }
            panel4.Invalidate();



но вроде там всё правильно!!!

может я чего невижу, я недавно занимаюсь этим языком!!!

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


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



На какой строке упало, очень просто можно выяснить если запустить прогу в режиме отладки (F5), дебаггер покажет на чём именно валится. А там уже разбирайтесь, что именно не так. Может у panel4 нулевой BackgroundImage.


--------------------
user posted image
PM MAIL WWW   Вверх
chudak
Дата 25.1.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



программа запускается, но когда шашечку скролла сдвинеш с места и переместиш форму вываливается ошибка выше описанная!!!

немогу понять почему, но так получалось из за Dispose(); вот тут:
Код

            {
                panel4.BackgroundImage.Dispose();
            }
 

вродебы и надо, но без него нормально работает!!!

спасибо что помоги все )))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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