Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 00:39   #1
acteralex
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 189
Восклицание Перекрытие изображений как в Photoshop

Привет всем!
В общем мне нужно сделать перекрытие 2ух изображений со смешиванием по типу красок (красный + желтый = оранжевый). Суть в том, что нужно перекрыть 2 картинки, но чтобы высчитался каждый пиксель.

Код:
for(int i = 0; i < Width; i++)
   for(int j = 0; j < Height; j++)
   {
     //здесь у меня пересчитываются пиксели.
   }
Всё это работает, но ооооооооочень медленно. При ресайзе естественно картинки становятся больше/меньше. при малейшем ресайзе опять идет пересчет пикселей. Сами понимаете, что это будет очень медленно.

C# Windows Forms. Размеры изображений от минимальных, до максимальных по размеру клиентского экрана.
Нужно на C# (ОБЯЗАТЕЛЬНО!).

Последний раз редактировалось acteralex; 11.03.2013 в 00:43. Причина: Уточнение
acteralex вне форума Ответить с цитированием
Старый 11.03.2013, 00:57   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
при малейшем ресайзе опять идет пересчет пикселей
А как насчет такой схемы: "новая" картинка (полученная наложением 2х старых) рассчитывается один раз. В дальнейшем на форме выводятся не 2 "старые" картинки, а только одна "новая". таким образом при ресайзе не потребуются дополнительные вычисления
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 11.03.2013, 09:24   #3
acteralex
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 189
По умолчанию

Так не пойдет, так как у меня картинки перерисовываются при ресайзе, если точнее, то у меня есть некий график, который зависит от размеров экрана., картинка стоит на бэкграунде. Если она маленькая, то она может повторяться как по х, так и по у.
acteralex вне форума Ответить с цитированием
Старый 11.03.2013, 10:44   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Простого "коробочного" решения на WinForms я не знаю, но есть интересная статья на тему полупрозрачности изображений в PictureBox: https://raviranjankr.wordpress.com/2...of-image-in-c/
P.S. Переходите на WPF
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 11.03.2013, 11:27   #5
acteralex
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 189
По умолчанию

Только начал изучать его.
Хорошо, а как можно решать это по-другому? Например, вписав функцию на C++ или полностью переписать на C# WPF? Только как?
acteralex вне форума Ответить с цитированием
Старый 14.03.2013, 13:16   #6
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Самое простое решение в данной ситуации-это рассчитать для максимального размера экрана картинку, а потом отображать только часть ее. Если такой вариант не прокатывает, то поможет только оптимизация и пересмотр архитектуры, но для советов нужен проект. Оптимизировать можно профайлером, такими как dotTrace или ANTS Performance Profiler, или их бесплатными аналогами. По опыту скажу, что профилирование не всегда дает результат (особенно, если только в одном цикле затык) и часто несет в себе пересмотр архитектуры.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 14.03.2013, 20:51   #7
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Если вызываете SetPixel/GetPixel, то львиная доля тормозов от этого.
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 14.03.2013, 23:22   #8
acteralex
Форумчанин
 
Регистрация: 19.05.2011
Сообщений: 189
По умолчанию

Цитата:
Если вызываете SetPixel/GetPixel, то львиная доля тормозов от этого.
Это понятно... Это слишком медленная функция...

Мне нужно что-то другое... Я вот думал есть ли такое что-то в C++, чтобы потом это внедрить в шарп
acteralex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перекрытие дивов masashama HTML и CSS 2 06.02.2012 20:28
PaintBox. Перекрытие изображений _-Re@l-_ Общие вопросы Delphi 2 13.05.2011 15:26
панель как у Photoshop/ tonatas Общие вопросы Delphi 1 13.04.2011 19:02
Перекрытие прерывания Dimon12345 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 03.12.2010 18:30