Оптимальный размер битмапы.

Тема в разделе "WASM.A&O", создана пользователем Clerk, 8 мар 2009.

  1. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    P.P.S.
    Ошибочка была серьезная (корень забыл и квадрат...), исправил.
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Ustus
    Спасибо за поправку. Хотелось написать "если размер строки растра не кратен 4, то она дополняется от 1 до 3 пустыми (нулевыми) байтами, чтобы длина строки оказалась кратна 4 байтам; при этом пиксель, в зависимости от содержимого поля biBitCount, может занимать 1, 4, 8, 16, 24, 32 бита, то есть выравнивание имеет смысл если biBitCount не равно 32"
    +++++000
    +++++000
    +++++000
    Рисунок подразумевал biBitCount=8
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Mikl___
    24-х битная битмапа, в памяти выравнивание массива не имеет значения.
    KeSqueer
    Пожалусто подробнее, RoundUp() - это округление к ближайшему наибольшему целому числу ?
    Или нахождение остатка.. Тогда наверно по модулю число взять нужно, sqrt(sq1-x) ведь в степень 0.5 можно возвести только положительное число.
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Clerk
    для 24битной как раз имеет ;) поэтому предпочитаю юзать 32битные :))
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Y_Mur
    Да точно.
     
  6. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Clerk
    да
    Хорошее предложение, в трех строчках нашел еще одну ошибку :) правильно так (обозначения другие для пояснений ниже):
    Код (Text):
    1. y = RoundUp(sqrt(z));
    2. x = RounDown(sqrt(y^2-z));
    3. w = y+x, h = y-x;
    как видно, во второй строке корень теперь берется из неотрицательного числа.

    Смысл такой:
    Пусть всего точек z. В первой строке вычисляем сторону y минимального квадрата, который вмещает в себя z точек. Если у квадрата две противоположных стороны увеличить на x, а две другие уменьшить на х, получим прямоугольник с площадью s = (y+x)*(y-x) = y^2-x^2. Чем больше анизотропность такого прямоугольника, тем меньше его площадь. Для того чтобы определить до каких пор можно увеличивать x, нужно решить неравенство s >= z. Отсюда х <= sqrt(y^2-z). Из-за того, что z, y и x - целые, вводится округление. Вроде все.
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    KeSqueer
    Вариант, конечно, но далеко не всегда даёт удачные результаты. Например, на числе 486 даст результат 29х17 (7 лишних), хотя 27х18 (нацело) явно лучше. Причём такие проколы будут наблюдаться на многих числах, которые значительно ближе к наибольшему меньшему полному квадрату, чем к наименьшему большему.
     
  8. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    l_inc
    В общем, верно, это также запечатлено в примерах. Но он и описывался как с приоритетом к квадратной форме. Можно попробовать к y еще 1 прибавить или 2 и посмотреть варианты какие получаются, но, в общем, хз.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    KeSqueer
    Не то, чувствую что без рядов не обойдётся, нужно подумать..
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    KeSqueer
    Эм... Так 27х18 ближе к квадратной форме, чем 29х17. :) Т.е. не выдержано ни условие максимальной близости к квадрату, ни условие минимизации числа лишних пикселей. Хотя в большинстве случаев, конечно, даёт неплохие результаты.
     
  11. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    ИМХО, условие на отношение сторон картинки необходимо, 2:1 - например.