Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Text -> Pixels -> Paint


Автор: Jackal 20.2.2005, 04:33
Привет, Всем! У меня такая трабла как перевести текст в пиксели? smile
Т.е. в TEdit'е пишем текст и/или букву. Затем загоняем ее в масив, скорее всего он должен быть двумерным, в виде пикселей, а затем отрисовываем его на, скажем, форме или любом другом компоненте (кроме текстовых). smile

Автор: _hunter 20.2.2005, 12:40
DrawText() тебе поможет

Автор: Бегемот 20.2.2005, 13:13
Если я всё правильно понял, то можно сделать вот так
Код

TColor color[281][21];  //281 - это Width компонента Edit;
                        //21 - это Height компонента Edit;
HDC hDC_Edit,hDC_Form;
int w,h;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 hDC_Edit = GetWindowDC(Edit1->Handle); //получаем HDC Edit и Form
 hDC_Form = GetWindowDC(Form1->Handle);
 w = Edit1->Width;                      //закидываем в переменные w и h    размеры Edit
 h = Edit1->Height;
 Canvas->Font->Color = clBlack;         //устанавливаем цвет шрифта    
 Canvas->Brush->Color = Form1->Color;    //это...
 Canvas->Pen->Color = Form1->Color;     // ..и это нам пригодится позже
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
//вывод текста на форму производится при нажатии в поле Edit клавиши ENTER
 if (Key == VK_RETURN)
 {
//сначало мы получаем все пиксели Edit и записываем их в массив...
  for(int i=0; i<w; i++)
    for(int j=0; j<h; j++)
      color[i][j] = GetPixel(hDC_Edit,i,j);
//..затем стераем всё то, что нахулиганили с прошлого ввода..
  Canvas->Rectangle(50,50,w,h);
//...а уж затем выводим на Form в нужное место...
  for(int i=0; i<w; i++)
    for(int j=0; j<h; j++)
//...при этом выводим только лишь те пиксели, цвет которых совпадает с цветом шрифта
      if (color[i][j] == Canvas->Font->Color)
        SetPixel(hDC_Form,i+50,j+50,color[i][j]);
 }
}

smile

Автор: Jackal 20.2.2005, 13:24
и так, и не так...
Хоцца отрисовывать на DrawGrid'е, каждый пиксел - одна ячейка.
Цитата
А в чем проблема! Берешь свойство TDrawGrid::OnCellDraw (по-моему). Там тебе передаются номер колонки, строки и куда наро рисовать. Берёш из массива и рисуешь.

я так и делал, но отрисовка происходит как на обычном canvas'е

Автор: Бегемот 20.2.2005, 15:32
Что-то я совсем запутался! smile
Цитата
отрисовка происходит как на обычном canvas'е

Как это понимать???

Автор: Borisff2003 21.2.2005, 06:40
Если правильно тебя понял

Отрисуй текст гденибудь на канвасе, а потом читай оттуда пиксели и закрашивай соответствующие ячейки в DrawGrid.

Автор: Бегемот 22.2.2005, 18:02
Цитата
Хоцца отрисовывать на DrawGrid'е, каждый пиксел - одна ячейка.

Попробуй этот вариант. smile
Код

TColor color[100][20];
HDC hDC_Edit;
int w,h;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 hDC_Edit = GetWindowDC(Edit1->Handle);

 Form1->ClientWidth = 600;
 Form1->ClientHeight = 400;
 Canvas->Font->Color = clBlack;

 DrawGrid1->Width = Form1->ClientWidth;
 DrawGrid1->Height = Form1->ClientHeight-90;
 DrawGrid1->DefaultColWidth = 5;
 DrawGrid1->DefaultRowHeight = 5;
 DrawGrid1->ColCount = 100;
 DrawGrid1->RowCount = 50;

 Edit1->Width = 100;  w = Edit1->Width;
 Edit1->Height = 20;  h = Edit1->Height;
 Edit1->Top = Form1->ClientHeight - h;
 Edit1->AutoSelect = false;
}
//---------------------------------------------------------------------------
TRect r;
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 if (Key == VK_RETURN)
 {
  for(int i=0; i<w; i++)
    for(int j=0; j<h; j++)
      color[i][j] = GetPixel(hDC_Edit,i,j);
  for(int i=0; i<w; i++)
    for(int j=0; j<h; j++)
      if (color[i][j] == Canvas->Font->Color)
      {
        r = DrawGrid1->CellRect(i,j);
        DrawGrid1->Canvas->Brush->Color = clBlack;
        DrawGrid1->Canvas->Rectangle(r);
      }
 }
}
smile

Автор: Jackal 24.2.2005, 14:28
Цитата(rewerew @ 23.2.2005, 02:02)
Цитата
Хоцца отрисовывать на DrawGrid'е, каждый пиксел - одна ячейка.

Попробуй этот вариант. smile
Код

TColor color[100][20];
HDC hDC_Edit;
int w,h;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 hDC_Edit = GetWindowDC(Edit1->Handle);

 Form1->ClientWidth = 600;
 Form1->ClientHeight = 400;
 Canvas->Font->Color = clBlack;

 DrawGrid1->Width = Form1->ClientWidth;
 DrawGrid1->Height = Form1->ClientHeight-90;
 DrawGrid1->DefaultColWidth = 5;
 DrawGrid1->DefaultRowHeight = 5;
 DrawGrid1->ColCount = 100;
 DrawGrid1->RowCount = 50;

 Edit1->Width = 100;  w = Edit1->Width;
 Edit1->Height = 20;  h = Edit1->Height;
 Edit1->Top = Form1->ClientHeight - h;
 Edit1->AutoSelect = false;
}
//---------------------------------------------------------------------------
TRect r;
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 if (Key == VK_RETURN)
 {
  for(int i=0; i<w; i++)
    for(int j=0; j<h; j++)
      color[i][j] = GetPixel(hDC_Edit,i,j);
  for(int i=0; i<w; i++)
    for(int j=0; j<h; j++)
      if (color[i][j] == Canvas->Font->Color)
      {
        r = DrawGrid1->CellRect(i,j);
        DrawGrid1->Canvas->Brush->Color = clBlack;
        DrawGrid1->Canvas->Rectangle(r);
      }
 }
}
smile

Пробовал...неполучаецца...
Каждая буква ограничивается размером 5х7, т.е. 5 ячеек ширина и 7 ячеек высота буквы на DrawGrid'е. Все предложенные варианты выходят за пределы этих значений... Может еще как-то мона зделать?

Автор: Бегемот 24.2.2005, 17:45
Сколько мы уже тут чего-то делаем, а я до сих пор непойму чего ты хочешь сделать-то!!!
Сначало ты пишешь... smile
Цитата
У меня такая трабла как перевести текст в пиксели? 
Т.е. в TEdit'е пишем текст и/или букву. Затем загоняем ее в масив, скорее всего он должен быть двумерным, в виде пикселей, а затем отрисовываем его на, скажем, форме или любом другом компоненте (кроме текстовых).

Я тебе пишу код, который загоняет текст в массив, именно двумерный, причём именно в виде пикселей,а затем отрисовывает его на форме.
После чего ты пишешь... smile
Цитата
Хоцца отрисовывать на DrawGrid'е, каждый пиксел - одна ячейка.

Тогда я изменяю код, в результате чего каждый,занесённый в массив ,пиксел, каждого символа, введённого в Edit, отрисовывается на DrawGrid, занимая при этом одну ячейку
А теперь ты пишешь...
Цитата
Пробовал...неполучаецца...

...и пишешь какие-то новые условия
Цитата
Каждая буква ограничивается размером 5х7, т.е. 5 ячеек ширина и 7 ячеек высота буквы на DrawGrid'е. Все предложенные варианты выходят за пределы этих значений...

А зачем тебе нужно ограничевать размер буквы на DrawGrid'e? Буквы сами по себе разных размеров(имею ввиду в пикселях по ширине и по высоте)?
Да нет, я не ругаюсь! smile Я тебе правда хочу помочь, вот только не могу понять чего делать-то. smile

Автор: Borisff2003 25.2.2005, 06:27
В приведенном примере, поставь маленький размер шрифта

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