Клас для контрол для создания Bit Edit'a
От: Diamond16  
Дата: 07.06.04 15:19
Оценка:
Стоит задача разработать битовый редактор/просмотровщик файлов. Он должен отображать файл как непрерывную последовательность битов. Безо всякой привязки к байтам должна быть поддержка больших файлов. Предусматривается два режима отображения 1) Когда значение бита отображается в виде «1» или «0» 2) Графический когда бит отображается в виде закрашенного или не закрашенного квадрата. Естественно во втором режиме должна быть возможность отображения. Редактирование необходимо в обоих режимах.

Какой контрол посоветуете использовать для реализации такой задачи. Пробовал использовать различные табличные контролы в виртуальном режиме, т.е. когда каждая ячейка в таблице отвечает за отображение своего бита из файла. Но возникает проблема когда отображаешь каждый бит, например, в виде точки размером 1-2 пикселя. То на такой таблице на экране одновременно получается около 1 000 000 ячеек. Стоит чуть чуть подвинуть прокрутку и можно минуту ждать пока экран перерисуется Как сделать отображение достаточно быстрым? Может эта тема уже где то подымалась и есть готовые классы?

P.S. Извините если вопрос не по теме форума, долго думал куда запостить.
Re: Добавление
От: Diamond16  
Дата: 07.06.04 15:26
Оценка:
Жутко извиняюсь за название вопроса не обратил внимание когда отправлял, а теперь не пойму как изменить сообщение. Просьба к администратору исправить, на что не будь типа "Контрол для создания Bit Edit'a"
Re: Клас для контрол для создания Bit Edit'a
От: korzhik Россия  
Дата: 07.06.04 15:43
Оценка:
Здравствуйте, Diamond16, Вы писали:

>То на такой таблице на экране одновременно получается около 1 000 000 ячеек. Стоит чуть чуть подвинуть прокрутку и можно минуту ждать пока экран перерисуется Как сделать отображение достаточно быстрым?


здесь
Автор(ы): Тимофей Чадов
Дата: 10.09.2001
читал?
попробуй использовать кеширование
... << RSDN@Home 1.1.3 stable >>
Re[2]: Клас для контрол для создания Bit Edit'a
От: Diamond16  
Дата: 07.06.04 15:50
Оценка:
Здравствуйте, korzhik, Вы писали:

K>здесь
Автор(ы): Тимофей Чадов
Дата: 10.09.2001
читал?

K>попробуй использовать кеширование

Никакое кэширование не помогает проблема не в том, что я из файла медленно читаю (на экране отображается обычно менее 100 Кб данных), а в том что медленно отрисовываются ячейки таблицы. Таблицу естественно использую в виртуальном режиме. Но пока для каждой ячейки вызовется обработчик проходит очень много времени, даже если в самом обработчике ничего вообще не делать.
Re: Клас для контрол для создания Bit Edit'a
От: VladFein США  
Дата: 07.06.04 18:53
Оценка:
Здравствуйте, Diamond16, Вы писали:

D>Стоит задача разработать битовый редактор/просмотровщик файлов. Он должен отображать файл как непрерывную последовательность битов. Безо всякой привязки к байтам должна быть поддержка больших файлов. Предусматривается два режима отображения 1) Когда значение бита отображается в виде «1» или «0» 2) Графический когда бит отображается в виде закрашенного или не закрашенного квадрата. Естественно во втором режиме должна быть возможность отображения. Редактирование необходимо в обоих режимах.


D>Какой контрол посоветуете использовать для реализации такой задачи. Пробовал использовать различные табличные контролы в виртуальном режиме, т.е. когда каждая ячейка в таблице отвечает за отображение своего бита из файла. Но возникает проблема когда отображаешь каждый бит, например, в виде точки размером 1-2 пикселя. То на такой таблице на экране одновременно получается около 1 000 000 ячеек. Стоит чуть чуть подвинуть прокрутку и можно минуту ждать пока экран перерисуется Как сделать отображение достаточно быстрым? Может эта тема уже где то подымалась и есть готовые классы?


D>P.S. Извините если вопрос не по теме форума, долго думал куда запостить.


Думаю что для изображения 1,000,000 ячеек на экране никакой табличный контрол не подойдет.
Как Вам такая идея — если Вы хотите отобразить каждый бит в отдельный пиксел, то это очень напоминает монохромный битмэп.
Я бы попробовал создать 1-bpp битмэп и использовать данные из Вашего файла в CreateBitmapIndirect().
Re[2]: Клас для контрол для создания Bit Edit'a
От: korzhik Россия  
Дата: 07.06.04 19:20
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Думаю что для изображения 1,000,000 ячеек на экране никакой табличный контрол не подойдет.

listview в виртуальном режиме справляется и со 100 000 000 ячеек

VF>Как Вам такая идея — если Вы хотите отобразить каждый бит в отдельный пиксел, то это очень напоминает монохромный битмэп.

VF>Я бы попробовал создать 1-bpp битмэп и использовать данные из Вашего файла в CreateBitmapIndirect().
ему же необходимо два режима: 1)текстовый 2) графический
причём 1 бит <-> 1 пиксел слишком мелко имхо, ему же надо ещё редактировать.
и прикинь размер такого битмапа
... << RSDN@Home 1.1.3 stable >>
Re[3]: Клас для контрол для создания Bit Edit'a
От: VladFein США  
Дата: 07.06.04 20:08
Оценка: 1 (1)
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, VladFein, Вы писали:


VF>>Думаю что для изображения 1,000,000 ячеек на экране никакой табличный контрол не подойдет.

K>listview в виртуальном режиме справляется и со 100 000 000 ячеек
Если у Вас есть 100,000,000 ячеек, но видны только 100 — я и сам справлюсь
Вопрос в том сколько из них видны в одном экране, и как эффективно они заполняются.

VF>>Как Вам такая идея — если Вы хотите отобразить каждый бит в отдельный пиксел, то это очень напоминает монохромный битмэп.

VF>>Я бы попробовал создать 1-bpp битмэп и использовать данные из Вашего файла в CreateBitmapIndirect().
K>ему же необходимо два режима: 1)текстовый 2) графический
K>причём 1 бит <-> 1 пиксел слишком мелко имхо, ему же надо ещё редактировать.
Мелко? Можно StretchBlt()...
K>и прикинь размер такого битмапа
Какого "такого" битмэпа? И что? Нет ничего компактнее 1-bpp.
Re[4]: Клас или контрол для создания Bit Edit'a
От: Diamond16  
Дата: 08.06.04 06:30
Оценка:
Здравствуйте, korzhik, Вы писали:

K>listview в виртуальном режиме справляется и со 100 000 000 ячеек


Боюсь listview никак мне не подходит ведь даже в виртуальном режиме он может использовать не более 100 000 000 элементов, а этого никак не достаточно. Несложно прикинуть, что если открыть файл размером в 4 GB (на диске с NTFS может быть и больше), то в нем будет 4*1024*1024*1024*8 = 34 359 738 368 элементов и это не предел.

Здравствуйте, VladFein, Вы писали:

VF>Если у Вас есть 100,000,000 ячеек, но видны только 100 — я и сам справлюсь

VF>Вопрос в том сколько из них видны в одном экране, и как эффективно они заполняются.

На экране одновременно видно может быть, например 1280*1024 = 1 310 720 ячеек. Может быть, конечно, и куда меньше, но для анализа содержимого файла обычно интересует мелкий масштаб. И если пользователь хоть немного двигает прокрутку, то приходится перерисовывать весь экран

VF>Как Вам такая идея — если Вы хотите отобразить каждый бит в отдельный пиксел, то это очень напоминает монохромный битмэп.

VF>Я бы попробовал создать 1-bpp битмэп и использовать данные из Вашего файла в CreateBitmapIndirect().

Я думал над чем то вроде этого (нельзяли поподробнее), но как быть в этом случае с редактированием, отслеживанием текущей ячейки, выделением и т.п. Ведь нужен именно редактор, а не просто просмотровщик.
Re[5]: Клас или контрол для создания Bit Edit'a
От: VladFein США  
Дата: 08.06.04 17:23
Оценка:
Здравствуйте, Diamond16, Вы писали:

VF>>Как Вам такая идея — если Вы хотите отобразить каждый бит в отдельный пиксел, то это очень напоминает монохромный битмэп.

VF>>Я бы попробовал создать 1-bpp битмэп и использовать данные из Вашего файла в CreateBitmapIndirect().

D>Я думал над чем то вроде этого (нельзяли поподробнее), но как быть в этом случае с редактированием, отслеживанием текущей ячейки, выделением и т.п. Ведь нужен именно редактор, а не просто просмотровщик.


Точно так же, как редаkтируют битмэп. Координаты "редактора" можно показывать в статус-окне, а если у кого-нибудь есть трудности с попаданием в точку — ZOOM!
Re: Клас для контрол для создания Bit Edit'a
От: Nuald Россия http://nuald.blogspot.com
Дата: 09.06.04 00:20
Оценка:
Здравствуйте, Diamond16, Вы писали:

D>Как сделать отображение достаточно быстрым? Может эта тема уже где то подымалась и есть готовые классы?


Боюсь, что в данном случае вам будет проще и эффективнее наследовать прямо от CWnd (или CView если позволяет архитектура). Тогда вам надо будет определить OnDraw (перерисовка), OnMouseMove (выделение текущего элемента), OnLButtonUp(снятие/установка бита), OnLButtonDown(выделение рамочкой области) и т.п., а потом через SubclassDlgItem аттачить к нужным элементам (но это опять-таки зависит от архитектуры). Здесь ничего сложного и страшного нет, опытный программист сделает черновой работающий набросок за пару дней.
Re[2]: Клас для контрол для создания Bit Edit'a
От: Diamond16  
Дата: 09.06.04 14:33
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Боюсь, что в данном случае вам будет проще и эффективнее наследовать прямо от CWnd (или CView если позволяет архитектура). Тогда вам надо будет определить OnDraw (перерисовка), OnMouseMove (выделение текущего элемента), OnLButtonUp(снятие/установка бита), OnLButtonDown(выделение рамочкой области) и т.п., а потом через SubclassDlgItem аттачить к нужным элементам (но это опять-таки зависит от архитектуры). Здесь ничего сложного и страшного нет, опытный программист сделает черновой работающий набросок за пару дней.


Может быть тогда можно за основу взять какой небудь несложный табличный контрол, и перекрыть у него OnDraw. Непосоветуете что небудь подходящее и не навороченное попроще чем MFCGrid и ALXGrid
Re[3]: Клас для контрол для создания Bit Edit'a
От: Nuald Россия http://nuald.blogspot.com
Дата: 10.06.04 00:32
Оценка:
Здравствуйте, Diamond16, Вы писали:

D>Может быть тогда можно за основу взять какой небудь несложный табличный контрол, и перекрыть у него OnDraw. Непосоветуете что небудь подходящее и не навороченное попроще чем MFCGrid и ALXGrid


Проще не будет, а только сложнее. ИМХО я в данном задаче надобность в таблице вообще не вижу. А вот тормоза она внесет значительные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.