Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование на форме или в новом диалоговом окне.  (Прочитано 13367 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Shakesbeer
Постоялец

ru
Offline Offline

« : 01-04-2013 11:28 » 

Нужно по событию рисовать пиксели на форме или в новом окне.
Просто раньше работал с Builderoм Улыбаюсь
Код: (C#)
....
//-------------------------------------------------        
        Bitmap bitmap = new Bitmap(80, 60);// может ещё захочешь куда пиксел сунтуть поэтому 10 на 10;
        protected override void OnPaint(PaintEventArgs e)
        {
          //  Bitmap bitmap = new Bitmap(80, 60);// может ещё захочешь куда пиксел сунтуть поэтому 10 на 10;
            for (int i = 0; i < 80; i++)
                for (int j = 0; j < 60; j++)
                    bitmap.SetPixel(i, j, Color.Black);

            e.Graphics.DrawImage(bitmap, new Point(30, 450));

            base.OnPaint(e);
        }
//------------------------------------------------------------

..........

public void StatusUpdate()
        {
            StringBuilder dataStrOut = new StringBuilder();
            StringBuilder dataStrIn = new StringBuilder();
           
            if (bRunning)
            {
                for (int i = 0; i < XFERSIZE; i++)
                {
                    if ((i % 16) == 0) dataStrOut.Append(string.Format("\r\n{0:X4}", i));
                    dataStrOut.Append(string.Format(" {0:X2}", outData[i]));
                }
                dataStrOut.Append(string.Format("\r\n"));
                OutdataBox.Text += dataStrOut.ToString();                                   //This updates the OutdataBox with bytes transferred OUT


//----------------------------------IN-DATA----------------------------------
                int x1=1, y1=1;
                Bitmap bitmap = new Bitmap(80, 60);
                for (int i = 0; i < XFERSIZE; i++)
                {
                    if ((i % 16) == 0) dataStrIn.Append(string.Format("\r\n{0:X4}", i));
                    dataStrIn.Append(string.Format(" {0:X2}", inData[i]));
                    //-----------
                    int xcol = Convert.ToInt32(inData[i]);  // байт в int и потом в RGB color
                    textBox1.Clear();
                    textBox1.Text = string.Format(" {0:X2}", inData[i]); //xcol.ToString();

//---------------------Пытаюсь рисовать пиксели по событию--------------------
                    x1++;
                    if (x1 >= 80)
                    {
                        x1 = 1;
                        y1++;
                        if (y1 >= 60)
                        {
                            y1 = 1;
                            bitmap.SetPixel(x1, y1, Color.FromArgb(16, xcol, xcol, xcol));
                        }
                    }                    
                }
                dataStrIn.Append(string.Format("\r\n"));
                InDataBox.Text += dataStrIn.ToString();                                      //This updates the InDataBox with bytes transferred IN
            }

        }
Заранее благодарю за помощь и не откажусь если кто кинет на ссылки на полезный ресурс.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 01-04-2013 12:07 » 

Shakesbeer, краткость, конечно, сестра таланта, но в чём проблема? Или ты полагаешь, что кто-то сумеет выдранный из программы кусок кода как-то запустить, чтобы посмотреть?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Shakesbeer
Постоялец

ru
Offline Offline

« Ответ #2 : 01-04-2013 12:54 » 

Shakesbeer, краткость, конечно, сестра таланта, но в чём проблема? Или ты полагаешь, что кто-то сумеет выдранный из программы кусок кода как-то запустить, чтобы посмотреть?
Вопрос собственно в том и состоит как рисовать пиксели по событию. И ещё как задавать цвет пиксела через integer.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 01-04-2013 13:21 » 

В мире компьютерной техники как правило используется схема RGB для передачи цветов.
0x00FF0000 - соотвествует красному
0x0000FF00 - соотвествует зеленому
0x000000FF - соотвествует синему
0x00000000 - соотвествует черному
0x00FFFFFF - соотвествует белому

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

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 01-04-2013 13:45 » 

Цитата: Shakesbeer
Вопрос собственно в том и состоит как рисовать пиксели по событию.
Так же, как и делать что угодно по событию. Или так же, как рисовать пиксели не по событию. Это два совершенно не связанных друг с другом вопроса.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Shakesbeer
Постоялец

ru
Offline Offline

« Ответ #5 : 02-04-2013 09:42 » 

В мире компьютерной техники как правило используется схема RGB для передачи цветов.
0x00FF0000 - соотвествует красному
0x0000FF00 - соотвествует зеленому
0x000000FF - соотвествует синему
0x00000000 - соотвествует черному
0x00FFFFFF - соотвествует белому

Залазиеш в вменяемый графический редактор, там выбираеш цвет для кисточки, и смотриш какие циферки получились для каждого канала.
bitmap.SetPixel(x1, y1, Color.FromArgb(16, xcol, xcol, xcol));
xcol у меня меняется.

Добавлено через 4 часа, 24 минуты и 41 секунду:
Рисую прямоугольник:
Код: (C#)
System.Drawing.Bitmap bmap = new Bitmap(101, 101);
//--------------------------------------------------------------------
        void PixelPaint(int x, int y, int bcol)
        {
            // System.Drawing.Bitmap.SetPixel(10, 10, Color.Red);
            bmap.SetPixel(x, y, Color.FromArgb(bcol, bcol, bcol, bcol));
        }
//--------------------------------------------------------------------
        public Form1()
        {


            for (int i = 1; i <= 100; i++)
            {
                for (int j = 1; j <= 100; j++)
                    PixelPaint(i, j, 1);
            }
.........
Как вывести его на форму?
« Последнее редактирование: 02-04-2013 14:07 от Shakesbeer » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 02-04-2013 14:27 » new

Shakesbeer, а как вобще осуществляется рисование куда бы то ни было? DeviceContext о чём-то говорит? OnPaint?  e.Graphics.DrawImage? Код из твоего первого сообщения.
« Последнее редактирование: 02-04-2013 14:30 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Shakesbeer
Постоялец

ru
Offline Offline

« Ответ #7 : 02-04-2013 15:01 » 

Нашел пример:
Код: (C#)
protected override void OnPaint(PaintEventArgs e)
{
   Bitmap bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.BoostNeddleTest);
   // Draw using this  
   e.Graphics.DrawImage(bmp,100,100);
   base.OnPaint(e);
}
....
public Form1()
    {
        this.Paint += new PaintEventHandler(OnPaint); // выдает ошибку
    }

Как вызывать эту функцию?
Записан
Shakesbeer
Постоялец

ru
Offline Offline

« Ответ #8 : 02-04-2013 15:09 » 

Shakesbeer, а как вобще осуществляется рисование куда бы то ни было? DeviceContext о чём-то говорит? OnPaint?  e.Graphics.DrawImage? Код из твоего первого сообщения.
Я всегда работал на Builderе, поэтому и обратился к вам за помощью. Если есть возможность - объясните или дайте ссылку на полезный ресурс.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 02-04-2013 15:25 » 

При чём здесь Билдер, С++, Ява, C# и иже с ними? Ты  это делаешь под виндой? Да. А под виндой нет другого способа рисования, кроме как в DC окна.
Отсюда вопрос: ты хочешь научиться, или "пабысраму забабахать" - скопипастить какой-нить код без понятия, в надежде что он заработает?

Если второе, то простимся сразу. Если первое, то запасайся терпением, ибо судя по твоим вопросам ты в матчасти, мягко говоря, плаваешь. И не надо постоянно вспоминать Билдер. Там рисование, в принципе, нууу ничем не отличается от рисования в С++ или C#. А если ты так на нём зациклился, то значит и на нём "рисовать" не умел. Или?

А чтобы объяснить, надо знать на каком уровне начать объяснение. Ведь тебя наверняка не устроит ответ на вопрос:
Как вывести его на форму?

в виде: "отрисовать его в DC формы"? Сначала надо установить, что ты уже знаешь, и чего ты ещё должен узнать.

Вот это-то и пытаемся выяснить.

Ну хоть GDI, gdi+ о чём-нить говорит?
« Последнее редактирование: 02-04-2013 15:31 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Shakesbeer
Постоялец

ru
Offline Offline

« Ответ #10 : 02-04-2013 15:36 » 

Я уже давно не студент, просто есть необходимость переделать быстро чужой код.в ограниченные сроки. Попросту нет времени на изучение.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 02-04-2013 16:11 » 

Shakesbeer, ну так передай задачу более компетентному специалисту за денюжку. Форум не для таких вопросов, а именно для изучения. Ну может кто по доброте душевной что-то выложит, так всё равно ж это будет не готовое решение.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Shakesbeer
Постоялец

ru
Offline Offline

« Ответ #12 : 03-04-2013 17:14 » 

Dimka, Хорошо, куплю бутылку пива тому, кто это сделает.
Записан
Dmitry
Помогающий

ru
Offline Offline

« Ответ #13 : 03-04-2013 20:12 » 

Цитата
// выдает ошибку
У тебя сигнатура метода не соответствует делегату, с которым объявлено событие Paint.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines