-
Доброго времени суток. Давно пытаюсь смастерить нечто подобное одной из стандартных функций 99% графических редакторов (paint, photoshop, gimp, picasa и пр.). Нужно собственно вот что: 1. Подгрузить на форума картинку 2. на картинке нарисовать квадратик (прямоугольник) 3. Возможность динамически (мышью) изменять размеры этого самого квадратика 4. После нажатия на кнопку "обрезка" - обрезать всё, что выходило за границы этого квадратика! (типа "раскадровка" в фотошопе)
Собственно основной вопрос в том, как лучше реализовать данный квадратик? В какую сторону копать? Ещё хотелось бы сделать затемнение той области, которая будет отрезана.
-
Что бы не закрыли твою ветку, лучше расскажи что делал, и что не получается.... конкретный момент, а не задачу в целом.... ЗЫЖ Впрочем если и закроют, то будут правы.
-
> XeON (28.01.2009 14:34:00) [0]
> Ещё хотелось бы сделать затемнение той области, которая будет отрезана.
Микрософту на это потребовалось 15 лет А я предлагаю их переплюнуть, затемнять, то что не отрезается. Сообственно у тебя не одназначно, насчет "будет отрезана" это внутренняя или внешняя часть.
-
Рамка рисуется путем установки режима XOR на Canvas (один раз - нарисуется, второй по тому же месту - сотрется). Движения мыши перехватываются, на WM_MOUSEMOVE вешаем перерисовщик рамки в новых координатах (сначала стираем в старых).
Ну и ка кобычно Уверен, в гугле найдется много примерно исходников графических редакторов, с разжевыванием, и даже на дельфи
-
> Рамка рисуется путем установки режима XOR
И получается рамка самых невероятных цветов?=)
-
> KSergey (28.01.2009 15:55:03) [3]
Там не резиновая рамка и не рамка даже, а более сложная структура и рисуется обычно не XOR
-
Рисовать прямоугольник лучше черех xor. 1) Во-первых стиреть его проще всего через тот же xor. 2) Во-вторых он будет заметен везде и на черном фоне и на белом. Так как будет контрастировать.
После того как рамка создана создаешь маску. Затемнение делать при помощи смешивания с черным цветом. Разумеется нужно также хранить в оригинали изоброжение.
Для возможности перемещения хранить координаты квадрата.
-
> Pavia (28.01.2009 16:12:06) [6]
И на сером? Затемнение делают с помощи шахматной маcки, тот же XOR
-
> Denis__ © (28.01.09 16:00) [4] > И получается рамка самых невероятных цветов?=)
> Anatoly Podgoretsky © (28.01.09 16:04) [5] > а более сложная структура и рисуется обычно не XOR
Ребята, ну вы б рассказали при помощи какой "сложной структуры" это все рисуется, раз такие умные :) Я хоть знать буду.
Автору б ХОR для начала осилить, думаю.
-
> Denis__ © (28.01.09 16:00) [4] > И получается рамка самых невероятных цветов?=)
В принципе из жизни могу утверждать, что это выглядит вполне очень хорошо. Кроме сплошного серого цвета :)
-
> KSergey © (28.01.09 16:50) [9] > > Denis__ © (28.01.09 16:00) [4] > И получается рамка > самых невероятных цветов?=)В принципе из жизни могу утверждать, > что это выглядит вполне очень хорошо. Кроме сплошного серого > цвета :)
А если сплашной все ж таки? Тогда что делать?))
-
> KSergey (28.01.2009 16:48:08) [8]
Если ты видел, то это рамка с 8 маркерами и не переключаемая, а непрерывного цвета, а в диспетчере рисунков еще дальше пошли, ушли от рамки совсем оставили только маркеры и сделали затемнение, мне не очень удобно, но зато сделали возможно ввести точные значения в окошечки и не надо вылавливать мышкой пиксели.
-
> KSergey (28.01.2009 16:50:09) [9]
Выглядит обычно нормально, часто так делают из-за простоты реализации, ничего сохранять не надо. Вот серый цвет всю малину портит.
-
> Anatoly Podgoretsky (28.01.2009 16:58:12) [12]
Кстати из-за проблемы с серым и сделали затемнение.
-
CopyRect смотри справку и примеры работы именно то что нужно.
-
Щас расскажу что делал. Нашёл какой-то компонент, типа Panel кажись... Накинул таких компонентов 4 штуки, сделал у них толщину по то ли по 1, то ли по 2 пикселя (винчестер сгорел, так-что сейчас затрудняюсь ответить), потом по аналогии прикрутил к углам этой рамки маркеры, из таких же компонентов, только чёрного цвета... А дальше был алгоритм, смысл которого думаю рассказывать не стоит, т.к. слишком долго! Потом дело было так: в зависимости от размеров формы динамически менялся размер TImage, после чего вычислялось, во сколько раз на изображении картинка уменьшена... После чего определялась позиция рамки, и пусть с небольшой погрешностью, но всё-таки картинка обрезалась! Вроде правильно объяснил? :)
Потом я понял, что данный метод "не айс", да и к тому же исходники уже ушли в небытие, а ноутбук в мусорку. И я решил спросить у уважаемых мастеров, способ получше моего! Что собственно и сделал.
-
> винчестер сгорел > ноутбук в мусорку
сгорел сарай - гори и хата? (с)
-
> XeON © (28.01.09 18:43) [15]
Все ручками, компоненты лучше не пользоваться, Только PaintBox для вывода.
-
>[15] XeON © (2009-01-28 18:43:00) >я решил спросить у уважаемых мастеров, способ получше моего! graphics32, samples.
--- Do what thou wilt shall be the whole of the Law.
-
Я компоненты и не хочу пользовать, хочу всё сам сделать! Единственное, что хочу сделать не сам, так это TImage готовый взять, что бы в него грузить картинку. Вопрос только в том, как это правильно реализовать? В принципе, подойдет любая среда + язык. Delphi, C++, Basic, C#.
Пошел читать xor...
|