Конференция "Прочее" » Обрезка изображения [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...
  • antonn © (28.01.09 19:57) [20]
    Рамку лучше рисовать свою, без всяких xor, это должна быть рамка, а не разноцветное художество. Для чего нужна фича "ее можно стереть" не понятно.

    Сейчас гляну, где то был пример вроде...
  • XeON © (28.01.09 19:58) [21]
    Уважаемый antonn, подскажите, а как её нужно рисовать? Я в этом деле вообще не дундук.
  • antonn © (28.01.09 20:00) [22]
    собственно, если предполагается рисовать рамку "одним взмахом" то пригодится этот пример - http://desksoft.ru/index.php?forum=13&th=113
    если нужно рисовать рамку с маркерами, за которые ее можно ресайзить - это посложнее
  • XeON © (28.01.09 20:22) [23]
    Думаю самое сложно для меня - это её нарисовать. Ресайзить её тоже придется, но это мне кажется будет проще...
  • antonn © (28.01.09 20:25) [24]
    да в чем проблема, два битмапа, в первом твое изображение, второй буферный. На второй копируешь первый, рисуешь на втором рамку (canvas.lineto()) и выводишь второй на окно, и так при каждом "кадре".
  • XeON © (28.01.09 20:28) [25]
    antonn, а как-то там DoubleBuffer поставить мона? или трипл буфер... Помню чё-то такое было!
  • antonn © (28.01.09 20:29) [26]
    не надо его ставить, оно и так по схеме [24] без мерцаний работает
  • XeON © (28.01.09 20:45) [27]
    А это че за ботва такая? Загрузил картинку, пишу:
    Image1.Canvas.LineTo(10,100);

    , компилируется и вылетает, запускается, потом вылетает с ошибкой!
  • antonn © (28.01.09 21:00) [28]
    не грузи jpeg, только bmp
  • XeON © (28.01.09 21:01) [29]
    А как из JPEG'a в битмап сделать?
    P.S. Чёт всё позабывал, блин!
  • Jeer © (28.01.09 21:06) [30]

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


    Первый блин ?
    Так он - комом, как известно.
    Учись, студент.
  • XeON © (28.01.09 21:13) [31]
    Этот блин, уже перерастает в "во блин!". И он не первый... И я не студент... :)
    Но всё-таки хотелось бы узнать, как переделать ЖПГ в Битмап.
  • antonn © (28.01.09 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 © (28.01.09 22:24) [33]
    Удалено модератором
  • ketmar © (29.01.09 14:08) [34]
    >[31] XeON © (2009-01-28 21:13:00)
    дядя петя, ты идиот?

    ---
    All Your Base Are Belong to Us
  • Jeer © (29.01.09 15:20) [35]

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


    Да это почти синонимы даже по отдельности.
  • antonn © (29.01.09 15:28) [36]
    Запрещается:
      1. Хамство, оскорбления, переход на личности, угрозы физической расправы или любые действия, противоречащие Конституции РФ или попадающие под действия УК РФ (и провоцирование других участников на эти действия).

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

    ---
    All Your Base Are Belong to Us
 
Конференция "Прочее" » Обрезка изображения [WinXP]
Есть новые Нет новых   [134454   +44][b:0][p:0.001]