Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

Обрезка изображения   Найти похожие ветки 

 
XeON ©   (2009-01-28 14:34) [0]

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

Собственно основной вопрос в том, как лучше реализовать данный квадратик? В какую сторону копать? Ещё хотелось бы сделать затемнение той области, которая будет отрезана.


 
{RASkov} ©   (2009-01-28 15:28) [1]

Что бы не закрыли твою ветку, лучше расскажи что делал, и что не получается.... конкретный момент, а не задачу в целом....
ЗЫЖ Впрочем если и закроют, то будут правы.


 
Anatoly Podgoretsky ©   (2009-01-28 15:42) [2]

> XeON  (28.01.2009 14:34:00)  [0]

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

Микрософту на это потребовалось 15 лет
А я предлагаю их переплюнуть, затемнять, то что не отрезается.
Сообственно у тебя не одназначно, насчет "будет отрезана" это внутренняя или внешняя часть.


 
KSergey ©   (2009-01-28 15:55) [3]

Рамка рисуется путем установки режима XOR на Canvas (один раз - нарисуется, второй по тому же месту - сотрется).
Движения мыши перехватываются, на WM_MOUSEMOVE вешаем перерисовщик рамки в новых координатах (сначала стираем в старых).

Ну и ка кобычно Уверен, в гугле найдется много примерно исходников графических редакторов, с разжевыванием, и даже на дельфи


 
Denis__ ©   (2009-01-28 16:00) [4]


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

И получается рамка самых невероятных цветов?=)


 
Anatoly Podgoretsky ©   (2009-01-28 16:04) [5]

> KSergey  (28.01.2009 15:55:03)  [3]

Там не резиновая рамка и не рамка даже, а более сложная структура и рисуется обычно не XOR


 
Pavia ©   (2009-01-28 16:12) [6]

Рисовать прямоугольник лучше черех xor.
1) Во-первых стиреть его проще всего через тот же xor.
2) Во-вторых он будет заметен везде и на черном фоне и на белом. Так как будет контрастировать.

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

Для возможности перемещения хранить координаты квадрата.


 
Anatoly Podgoretsky ©   (2009-01-28 16:34) [7]

> Pavia  (28.01.2009 16:12:06)  [6]

И на сером?
Затемнение делают с помощи шахматной маcки, тот же XOR


 
KSergey ©   (2009-01-28 16:48) [8]

> Denis__ ©   (28.01.09 16:00) [4]
> И получается рамка самых невероятных цветов?=)

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

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

Автору б ХОR для начала осилить, думаю.


 
KSergey ©   (2009-01-28 16:50) [9]

> Denis__ ©   (28.01.09 16:00) [4]
> И получается рамка самых невероятных цветов?=)

В принципе из жизни могу утверждать, что это выглядит вполне очень хорошо. Кроме сплошного серого цвета :)


 
Denis__ ©   (2009-01-28 16:56) [10]


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

А если сплашной все ж таки? Тогда что делать?))


 
Anatoly Podgoretsky ©   (2009-01-28 16:57) [11]

> KSergey  (28.01.2009 16:48:08)  [8]

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


 
Anatoly Podgoretsky ©   (2009-01-28 16:58) [12]

> KSergey  (28.01.2009 16:50:09)  [9]

Выглядит обычно нормально, часто так делают из-за простоты реализации, ничего сохранять не надо. Вот серый цвет всю малину портит.


 
Anatoly Podgoretsky ©   (2009-01-28 17:04) [13]

> Anatoly Podgoretsky  (28.01.2009 16:58:12)  [12]

Кстати из-за проблемы с серым и сделали затемнение.


 
test   (2009-01-28 17:14) [14]

CopyRect смотри справку и примеры работы именно то что нужно.


 
XeON ©   (2009-01-28 18:43) [15]

Щас расскажу что делал. Нашёл какой-то компонент, типа Panel кажись... Накинул таких компонентов 4 штуки, сделал у них толщину по то ли по 1, то ли по 2 пикселя (винчестер сгорел, так-что сейчас затрудняюсь ответить), потом по аналогии прикрутил к углам этой рамки маркеры, из таких же компонентов, только чёрного цвета... А дальше был алгоритм, смысл которого думаю рассказывать не стоит, т.к. слишком долго! Потом дело было так:
в зависимости от размеров формы динамически менялся размер TImage, после чего вычислялось, во сколько раз на изображении картинка уменьшена... После чего определялась позиция рамки, и пусть с небольшой погрешностью, но всё-таки картинка обрезалась! Вроде правильно объяснил? :)

Потом я понял, что данный метод "не айс", да и к тому же исходники уже ушли в небытие, а ноутбук в мусорку. И я решил спросить у уважаемых мастеров, способ получше моего! Что собственно и сделал.


 
БарЛог ©   (2009-01-28 18:53) [16]

> винчестер сгорел
> ноутбук в мусорку

сгорел сарай - гори и хата? (с)


 
Pavia ©   (2009-01-28 19:29) [17]


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

Все ручками, компоненты лучше не пользоваться, Только PaintBox для вывода.


 
ketmar ©   (2009-01-28 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 ©   (2009-01-28 19:47) [19]

Я компоненты и не хочу пользовать, хочу всё сам сделать! Единственное, что хочу сделать не сам, так это TImage готовый взять, что бы в него грузить картинку. Вопрос только в том, как это правильно реализовать? В принципе, подойдет любая среда + язык. Delphi, C++, Basic, C#.

Пошел читать xor...


 
antonn ©   (2009-01-28 19:57) [20]

Рамку лучше рисовать свою, без всяких xor, это должна быть рамка, а не разноцветное художество. Для чего нужна фича "ее можно стереть" не понятно.

Сейчас гляну, где то был пример вроде...


 
XeON ©   (2009-01-28 19:58) [21]

Уважаемый antonn, подскажите, а как её нужно рисовать? Я в этом деле вообще не дундук.


 
antonn ©   (2009-01-28 20:00) [22]

собственно, если предполагается рисовать рамку "одним взмахом" то пригодится этот пример - http://desksoft.ru/index.php?forum=13&th=113
если нужно рисовать рамку с маркерами, за которые ее можно ресайзить - это посложнее


 
XeON ©   (2009-01-28 20:22) [23]

Думаю самое сложно для меня - это её нарисовать. Ресайзить её тоже придется, но это мне кажется будет проще...


 
antonn ©   (2009-01-28 20:25) [24]

да в чем проблема, два битмапа, в первом твое изображение, второй буферный. На второй копируешь первый, рисуешь на втором рамку (canvas.lineto()) и выводишь второй на окно, и так при каждом "кадре".


 
XeON ©   (2009-01-28 20:28) [25]

antonn, а как-то там DoubleBuffer поставить мона? или трипл буфер... Помню чё-то такое было!


 
antonn ©   (2009-01-28 20:29) [26]

не надо его ставить, оно и так по схеме [24] без мерцаний работает


 
XeON ©   (2009-01-28 20:45) [27]

А это че за ботва такая? Загрузил картинку, пишу:
Image1.Canvas.LineTo(10,100);, компилируется и вылетает, запускается, потом вылетает с ошибкой!


 
antonn ©   (2009-01-28 21:00) [28]

не грузи jpeg, только bmp


 
XeON ©   (2009-01-28 21:01) [29]

А как из JPEG"a в битмап сделать?
P.S. Чёт всё позабывал, блин!


 
Jeer ©   (2009-01-28 21:06) [30]


> P.S. Чёт всё позабывал, блин!


Первый блин ?
Так он - комом, как известно.
Учись, студент.


 
XeON ©   (2009-01-28 21:13) [31]

Этот блин, уже перерастает в "во блин!". И он не первый... И я не студент... :)
Но всё-таки хотелось бы узнать, как переделать ЖПГ в Битмап.


 
antonn ©   (2009-01-28 21:17) [32]


> XeON ©   (28.01.09 21:01) [29]
>
> А как из JPEG"a в битмап сделать?
> P.S. Чёт всё позабывал, блин!
>

http://desksoft.ru/index.php?drkb=400&str_path=0|400&w


 
XeON ©   (2009-01-28 22:24) [33]

Удалено модератором


 
ketmar ©   (2009-01-29 14:08) [34]

>[31] XeON © (2009-01-28 21:13:00)
дядя петя, ты идиот?

---
All Your Base Are Belong to Us


 
Jeer ©   (2009-01-29 15:20) [35]


> дядя петя, ты идиот?


Да это почти синонимы даже по отдельности.


 
antonn ©   (2009-01-29 15:28) [36]

Запрещается:
  1. Хамство, оскорбления, переход на личности, угрозы физической расправы или любые действия, противоречащие Конституции РФ или попадающие под действия УК РФ (и провоцирование других участников на эти действия).


 
ketmar ©   (2009-01-29 15:41) [37]

>[36] antonn © (2009-01-29 15:28:00)
собачко, я топикстартеру сказал волшебное слово. судя по всему, он слово проигнорил и продолжает есть кактус. не идиот ли он после этого?

---
All Your Base Are Belong to Us



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.044 c
10-1153500862
XProger
2006-07-21 20:54
2009.03.29
Вызов _Release


2-1233924528
bioss
2009-02-06 15:48
2009.03.29
Работа с кодировками в Delphi


2-1232453730
Riply
2009-01-20 15:15
2009.03.29
inline в Delphi 2009


2-1234270641
Alex_Ford
2009-02-10 15:57
2009.03.29
Ping - Программно


15-1232536106
Ламо777
2009-01-21 14:08
2009.03.29
Бесплатный UML для AS3





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский