Конференция "Прочее" » Обрезка изображения [WinXP]
 
  • XeON © (28.01.09 14:34) [0]
    Доброго времени суток. Давно пытаюсь смастерить нечто подобное одной из стандартных функций 99% графических редакторов (paint, photoshop, gimp, picasa и пр.). Нужно собственно вот что:
    1. Подгрузить на форума картинку
    2. на картинке нарисовать квадратик (прямоугольник)
    3. Возможность динамически (мышью) изменять размеры этого самого квадратика
    4. После нажатия на кнопку "обрезка" - обрезать всё, что выходило за границы этого квадратика! (типа "раскадровка" в фотошопе)

    Собственно основной вопрос в том, как лучше реализовать данный квадратик? В какую сторону копать? Ещё хотелось бы сделать затемнение той области, которая будет отрезана.
  • {RASkov} © (28.01.09 15:28) [1]
    Что бы не закрыли твою ветку, лучше расскажи что делал, и что не получается.... конкретный момент, а не задачу в целом....
    ЗЫЖ Впрочем если и закроют, то будут правы.
  • Anatoly Podgoretsky © (28.01.09 15:42) [2]
    > XeON  (28.01.2009 14:34:00)  [0]

    > Ещё хотелось бы сделать затемнение той области, которая будет отрезана.

    Микрософту на это потребовалось 15 лет
    А я предлагаю их переплюнуть, затемнять, то что не отрезается.
    Сообственно у тебя не одназначно, насчет "будет отрезана" это внутренняя или внешняя часть.
  • KSergey © (28.01.09 15:55) [3]
    Рамка рисуется путем установки режима XOR на Canvas (один раз - нарисуется, второй по тому же месту - сотрется).
    Движения мыши перехватываются, на WM_MOUSEMOVE вешаем перерисовщик рамки в новых координатах (сначала стираем в старых).

    Ну и ка кобычно Уверен, в гугле найдется много примерно исходников графических редакторов, с разжевыванием, и даже на дельфи
  • Denis__ © (28.01.09 16:00) [4]

    > Рамка рисуется путем установки режима XOR

    И получается рамка самых невероятных цветов?=)
  • Anatoly Podgoretsky © (28.01.09 16:04) [5]
    > KSergey  (28.01.2009 15:55:03)  [3]

    Там не резиновая рамка и не рамка даже, а более сложная структура и рисуется обычно не XOR
  • Pavia © (28.01.09 16:12) [6]
    Рисовать прямоугольник лучше черех xor.
    1) Во-первых стиреть его проще всего через тот же xor.
    2) Во-вторых он будет заметен везде и на черном фоне и на белом. Так как будет контрастировать.

    После того как рамка создана создаешь маску.
    Затемнение делать при помощи смешивания с черным цветом. Разумеется нужно также хранить в оригинали изоброжение.

    Для возможности перемещения хранить координаты квадрата.
  • Anatoly Podgoretsky © (28.01.09 16:34) [7]
    > Pavia  (28.01.2009 16:12:06)  [6]

    И на сером?
    Затемнение делают с помощи шахматной маcки, тот же XOR
  • KSergey © (28.01.09 16:48) [8]
    > Denis__ ©   (28.01.09 16:00) [4]
    > И получается рамка самых невероятных цветов?=)

    > Anatoly Podgoretsky ©   (28.01.09 16:04) [5]
    > а более сложная структура и рисуется обычно не XOR

    Ребята, ну вы б рассказали при помощи какой "сложной структуры" это все рисуется, раз такие умные :) Я хоть знать буду.

    Автору б ХОR для начала осилить, думаю.
  • KSergey © (28.01.09 16:50) [9]
    > Denis__ ©   (28.01.09 16:00) [4]
    > И получается рамка самых невероятных цветов?=)

    В принципе из жизни могу утверждать, что это выглядит вполне очень хорошо. Кроме сплошного серого цвета :)
  • Denis__ © (28.01.09 16:56) [10]

    > KSergey ©   (28.01.09 16:50) [9]
    > > Denis__ ©   (28.01.09 16:00) [4] > И получается рамка
    > самых невероятных цветов?=)В принципе из жизни могу утверждать,
    >  что это выглядит вполне очень хорошо. Кроме сплошного серого
    > цвета :)

    А если сплашной все ж таки? Тогда что делать?))
  • Anatoly Podgoretsky © (28.01.09 16:57) [11]
    > KSergey  (28.01.2009 16:48:08)  [8]

    Если ты видел, то это рамка с 8 маркерами и не переключаемая, а непрерывного цвета, а в диспетчере рисунков еще дальше пошли, ушли от рамки совсем оставили только маркеры и сделали затемнение, мне не очень удобно, но зато сделали возможно ввести точные значения в окошечки и не надо вылавливать мышкой пиксели.
  • Anatoly Podgoretsky © (28.01.09 16:58) [12]
    > KSergey  (28.01.2009 16:50:09)  [9]

    Выглядит обычно нормально, часто так делают из-за простоты реализации, ничего сохранять не надо. Вот серый цвет всю малину портит.
  • Anatoly Podgoretsky © (28.01.09 17:04) [13]
    > Anatoly Podgoretsky  (28.01.2009 16:58:12)  [12]

    Кстати из-за проблемы с серым и сделали затемнение.
  • test (28.01.09 17:14) [14]
    CopyRect смотри справку и примеры работы именно то что нужно.
  • XeON © (28.01.09 18:43) [15]
    Щас расскажу что делал. Нашёл какой-то компонент, типа Panel кажись... Накинул таких компонентов 4 штуки, сделал у них толщину по то ли по 1, то ли по 2 пикселя (винчестер сгорел, так-что сейчас затрудняюсь ответить), потом по аналогии прикрутил к углам этой рамки маркеры, из таких же компонентов, только чёрного цвета... А дальше был алгоритм, смысл которого думаю рассказывать не стоит, т.к. слишком долго! Потом дело было так:
    в зависимости от размеров формы динамически менялся размер TImage, после чего вычислялось, во сколько раз на изображении картинка уменьшена... После чего определялась позиция рамки, и пусть с небольшой погрешностью, но всё-таки картинка обрезалась! Вроде правильно объяснил? :)

    Потом я понял, что данный метод "не айс", да и к тому же исходники уже ушли в небытие, а ноутбук в мусорку. И я решил спросить у уважаемых мастеров, способ получше моего! Что собственно и сделал.
  • БарЛог © (28.01.09 18:53) [16]
    > винчестер сгорел
    > ноутбук в мусорку

    сгорел сарай - гори и хата? (с)
  • Pavia © (28.01.09 19:29) [17]

    > XeON ©   (28.01.09 18:43) [15]

    Все ручками, компоненты лучше не пользоваться, Только PaintBox для вывода.
  • ketmar © (28.01.09 19:35) [18]
    >[15] XeON © (2009-01-28 18:43:00)
    >я решил спросить у уважаемых мастеров, способ получше моего!

    graphics32, samples.

    ---
    Do what thou wilt shall be the whole of the Law.
  • XeON © (28.01.09 19:47) [19]
    Я компоненты и не хочу пользовать, хочу всё сам сделать! Единственное, что хочу сделать не сам, так это TImage готовый взять, что бы в него грузить картинку. Вопрос только в том, как это правильно реализовать? В принципе, подойдет любая среда + язык. Delphi, C++, Basic, C#.

    Пошел читать xor...
 
Конференция "Прочее" » Обрезка изображения [WinXP]
Есть новые Нет новых   [134454   +44][b:0][p:0.001]