| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Алгоритм массштабирования битовой маски |
| Автор: Annuta 4.4.2007, 22:27 |
| Привет... Народ помогите организовать алгоритм массштабирования.. что-то не получается..... совсем... Задача такая есть битовая маска такая например 00000001 00000011 00001001 00010001 00100001 00000001 00000001 00000001 00000001 00000001 00000001 00000001 ширина 8 высота 12. Народ как мне организовать алгоритм массштабирования этой маски с заданным коэффициентом масштаба ??? подскажите плиз... я совсем в этих циклах запуталась... |
| Автор: DENNN 4.4.2007, 23:27 |
| Представь, что твоя битовая маска - это битмап. У тебя есть исходный битмап 8x12 и надо получить битмап MxN. Фактически задача сводится к поиску для любого пиксела из второй картинки соотвествующего ему пикселя из первой (т.к. у нас лишь ноль или единица, то считать "переходные" полутона не нужно). Простейший путь такого расчета: пропорция. Для каждой оси своя. Так скажем в результирующем изображении пиксель имеет координату X2. ТОгда получаем пропорцию X1/8=X2/M. Как решать пропорции учат еще в школе Пишешь подпрограмму, возвращающую для пары координат второго изображения, координаты на первом. Потом просто для каждого пикселя на создаваемом изображении вызываешь ее и получаешь соотвествующий текущему пиксель на первом. ))) |
| Автор: SoWa 5.4.2007, 05:47 |
| Мое предположение- при пропорциональном уменьшении точки будут сдвигаться по диагоналям. Объединив предыдущий алгоритм и проверку на точность диагоналями можно спокойно реализовать |
| Автор: Earnest 5.4.2007, 06:52 |
Мне кажется, проблема у нее не в этом. Annuta, тебе надо отделить ковыряние в пикселах маски от задачи масштабирования. Для этого напиши пару функций GetPixel\SetPixel для маски заданного размера. Масштабирование реализуй так, как написал DENNN: Для всех строк новой маски (row) Для всех столбцов новой маски (col) вычисляем координаты соответствующего пиксела в старой маске (row_old, col_old) спрашиваем у старой маски GetPixel (roq_old, col_old) записываем это значение в новую маску SetPixel (row, col) Это основа, дальше можно оптимизировать - скажем, предварительно очистить (заполнить нулями) новую маску и тогда записывать туда только единицы... Реализовать как следует GetPixel\SetPixel... |
| Автор: Akina 5.4.2007, 10:10 |
| Вопрос таков - единички "раздуваются" или нет? т.е. 0 0 0 1 при увеличении вдвое превратится в 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 или в 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 ? |
| Автор: DENNN 5.4.2007, 11:59 |
| Akina, раз масштабирование, то по логике должны раздуваться )) |
| Автор: Akina 5.4.2007, 12:16 |
| Я привык к тому, что постановка конкретной задачи обычно не отвечает логике... |