Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм массштабирования битовой маски


Автор: Annuta 4.4.2007, 22:27
Привет... Народ помогите организовать алгоритм массштабирования.. что-то не получается..... совсем... smile .. уже мозги пухнут...
Задача такая есть битовая маска такая например
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.  Как решать пропорции учат еще в школе  smile 

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

Автор: SoWa 5.4.2007, 05:47
Мое предположение- при пропорциональном уменьшении точки будут сдвигаться по диагоналям.
Объединив предыдущий алгоритм и проверку на точность диагоналями можно спокойно реализовать

Автор: Earnest 5.4.2007, 06:52
Цитата(Annuta @  4.4.2007,  23:27 Найти цитируемый пост)
подскажите плиз...  я совсем в этих циклах запуталась...

Мне кажется, проблема у нее не в этом.
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
Я привык к тому, что постановка конкретной задачи обычно не отвечает логике...

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