Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> требуются идеи /отрисовка символа/, рисование 
:(
    Опции темы
Annuta
Дата 23.3.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет..!  У меня есть OLED дисплей, я хочу выводить на нём текст - цифры буквы и тп 
 ... Есть прога написанная на Си она будет посылает код символа устройству... в устройстве есть прошивка которая должна анализировать этот код и выводить соответствующий символ.
  Вот загвоздка как раз в том --- как эти символы создать, отрисовывать.
  .... там есть ПЗУ -- думаю записывать их туда в виде массива... но как хранить сам символ так чтобы было его удобно отрисовывать ???? в виде маски ??? может...  /отрисовка идёт по пикселям/
   Есть оптыные знающие ....??? может кто поможет советом ...
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
_hunter
Дата 23.3.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



не понял загвоздки... создать их просто: обычный прамоуголный масси пикселей.
отрисовывать (это если про отрисовку на компе) из еще проще: создаем bitmap на основе этого массива и его и рисуем (или вообще попиксельно массив рисуем...)
хранить можно в виде бинарного файла.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Annuta
Дата 25.3.2007, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я немного о другом хорошо если хранить их в виде масок эти символы, то как быстрей всего создать маски всех символов которые на клавиатуре..???? чтобы каждая битовая маска представляла собой массив пикселей в котором бы например на чёрном фоне отрисовывался символ ???
00000001
00000111
00001001
00000001
00000001
00000001
00000001
00000001
как бысьрее всего создать массив таких битовых масок ??? не руками же их все рисовать ??? smile 
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
GremlinProg
Дата 26.3.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Самый быстрый - нарисовать на DI-битмапе весь алфавит средствами GDI(DrawText,TextOut...) и уже затем, использовать эту карту, индексируя каждый символьный код.

Добавлено через 1 минуту и 20 секунд
лучше всего, на монохромном DI-битмапе

Добавлено через 2 минуты и 53 секунды
Лучше всего моноширинным шрифтом


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Annuta
Дата 26.3.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А по подробней можно...???  smile ... 
Я немного по другому пути пошла.... я просто сделала гиф картинку со всем алфавитом - где каждый символ занимает 8 ширина 12 высота... и  в цикле прохожу его посторочно -- проблема в том как теперь создать маску для каждого символа и сохранить её...?

Это сообщение отредактировал(а) Annuta - 26.3.2007, 09:40
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
_hunter
Дата 26.3.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



из .gif-ки это сложновато, но можно сконвертить их в .bmp-хи, потом LoadBitmap(), потом SelectObject() его в DC, ну и потом просто в цикле по всем строкам/столбцам делаеш GetPixel() и если он != цвету текста пишеш в массив маски 0 иначе 1...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Annuta
Дата 26.3.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



если с помощью  моноширинных шрифтоф проще... то как это деалть ..? можно кусочек кода... 
Я с гифками так и пытаюсь сделать ... 
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
GremlinProg
Дата 26.3.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Смотри приложение и код
В конструкторе создается монохромный диб и на нем рисуется алфавит, заданным шрифтом,
затем в пайнте эта маска рисуется, в Edit выводится уже битовая информация.
Для наглядности, все единички я заменяю на пробелы, а все нолики вопросиками.
Посмотри реализацию UpdateMemo, там как раз запрашивается битовая карта очередного символа...
Понятно, что проблем с переводом на Си не будет...

Код

unit Unit1;

interface

uses
  Windows, SysUtils, Graphics, Forms, Controls, StdCtrls, Classes;

type

  TMonoDIB  = packed record
    case Byte of
      0:(
        bmi : TBitmapInfo;
      );
      1:(
        hdr   : TBitmapInfoHeader;
        zero  : TRGBQuad;
        one   : TRGBQuad;
      );
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender:TObject);
    procedure FormDestroy(Sender:TObject);
    procedure FormPaint(Sender:TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
  private
    m_Bmp     : TBitmap;
    m_Ptr     : Integer;
    m_Text    : String;
    m_CharSz  : Integer;
    m_Memory  : Pointer;
  public
    procedure UpdateMemo;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender:TObject);
var
  m_bmi : TMonoDIB;
  tm    : TTextMetric;
begin
  DoubleBuffered        := True;
  Memo1.DoubleBuffered  := True;
  m_Text  := 'àáâãä叿çèêëìíîïðñòóôõö÷øùúûüýþÿÀÁÂÃÄŨÆÇÈÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß';
  m_Bmp   := TBitmap.Create;
  ZeroMemory(@m_bmi,sizeof(m_bmi));
  m_Bmp.Canvas.Font.Name  := 'Courier new';
  m_Bmp.Canvas.Font.Size  := 14;
  GetTextMetrics(m_Bmp.Canvas.Handle,tm);
  //
  with m_bmi.hdr do
    begin
      biSize        := sizeof(TBitmapInfoHeader);
      biWidth       := tm.tmAveCharWidth * Length(m_Text);
      biHeight      := -tm.tmHeight;
      biPlanes      := 1;
      biBitCount    := 1;
      biCompression := BI_RGB;
      //
      m_CharSz      := tm.tmAveCharWidth;
    end;
  m_bmi.one.rgbRed    := 255;
  m_bmi.one.rgbGreen  := 255;
  m_bmi.one.rgbBlue   := 255;
  m_Bmp.Handle      := CreateDIBSection(0,m_bmi.bmi,DIB_RGB_COLORS,m_Memory,0,0);
  m_Bmp.Canvas.TextOut(0,0,m_Text);
  //
  UpdateMemo;
end;

procedure TForm1.FormDestroy(Sender:TObject);
begin
  DeleteObject(m_Bmp.ReleaseHandle);
  m_Bmp.Free;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  with Canvas do
    begin
      Draw(0,0,m_Bmp);
      Brush.Style := bsClear;
      Pen.Color   := clRed;
      Rectangle(
        Rect(
          m_Ptr*m_CharSz,
          0,
          (m_Ptr + 1)*m_CharSz,
          m_Bmp.Height
        )
      );
    end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_LEFT:
      begin
        if m_Ptr > 0 then
          begin
            Dec(m_Ptr);
            UpdateMemo;
            Invalidate;
            Key := 0;
          end;
      end;
    VK_RIGHT:
      begin
        if m_Ptr + 1 < Length(m_Text) then
          begin
            Inc(m_Ptr);
            UpdateMemo;
            Invalidate;
            Key := 0;
          end;
      end;
  end;
end;

procedure TForm1.UpdateMemo;
var
  byte,bit          : Integer;
  y,ibit,abit,abyte : Integer;
  alwidth           : Integer;
  lpByte            : PByte;
  MemoText          : String;
  Line              : String;
begin
  MemoText  := '';
  byte      := m_Ptr*m_CharSz;
  bit       := byte mod 8;
  byte      := byte div 8;
  alwidth   := m_Bmp.Width div 8;
  if m_Bmp.Width mod 8 <> 0 then
    Inc(alwidth);
  for y:= 0 to m_Bmp.Height-1 do
    begin
      abit  := bit;
      abyte := y*alwidth + byte;
      Line  := '';
      for ibit:=0 to m_CharSz-1 do
        begin
          if abit > 7 then
            begin
              Inc(abyte);
              abit  := 0;
            end;
          //
          lpByte  := PByte(PChar(m_Memory) + abyte);
          if (lpByte^ and ($80 shr abit)) <> 0 then
            Line  := Line + ' '
          else
            Line  := Line + '?';
          //
          Inc(abit);
        end;
        MemoText  := MemoText + Line + #$0D#$0A;
    end;
  Memo1.Text  := MemoText;
end;

end.


Добавлено через 14 минут и 53 секунды
прикрепить не могу, exe-шник сжатый весит 157 кб 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 26.3.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



прикрепил первую часть

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  BinaryTextSample.part1.rar 100,00 Kb


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
GremlinProg
Дата 26.3.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



прикрепил вторую часть

Добавлено через 4 минуты и 30 секунд
если не понятно, то в m_Text строка с алфавитом

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  BinaryTextSample.part2.rar 58,21 Kb


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Annuta
Дата 26.3.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Шпасибо.,!!!! Ща попробую у себя в студии такое сотворить..!
--------------------
Программист - это комбинация лени и логики !
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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