Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 149
1

Изменение изображения загруженного в IPictureDisp

18.08.2011, 23:31. Показов 2245. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Например у меня есть картинка, загруженная в переменную TempPicture, типа IPictureDisp. Мне нужно удалить лишний фон. У меня есть алгоритм, а вот как получить доступ к массиву пикселей - вопрос. Может как-то возможно преобразовать это в вид DIB, а там вроде есть Bits(0,0,0) as Byte. Возможно как-то можно скопировать это все из оперативки, но необходимо знать, как представляются там данные.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2011, 23:31
Ответы с готовыми решениями:

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

Свойства загруженного изображения
Ребята, помогите начинающей) В Image загружаю изображение. Нужно вывести на форму также его...

Обновление изображения, загруженного в БД
Здравствуйте. Как обновить уже загруженное изображение в БД(загружал так)? Я пытаюсь обновить...

Не выводит размеры загруженного изображения
Здравствуйте, дамы и господа! Программирую на java 2 недели, так что сильно камнями не...

5
Comanche
19.08.2011, 19:07 2
>> Мне нужно удалить лишний фон

Главное - что под этим подразумевается. Если просто 'взять пиксель - проанализировать его цвет - изменить цвет при необходимости', то проще всего загнать IPictureDisp в обычный пикчербокс (невидимый, если мешает), и далее поработать с Point и PSet.

Т.е. типа такого:
Visual Basic
1
2
3
4
Set Picture1.Picture = TempPicture
...
...
If Picture1.Point(X, Y) <> vbWhite Then Picture1.PSet (X, Y), vbWhite
Правда, это способ 'в лоб' и потому долгий: предполагается перебор X и Y в обычном цикле хотя если картинка маленькая - то почему бы и нет?

А так можно ещё попробовать поковырять GetDIBits и SetDIBitsToDevice, или слазить на VbAccelerator.Com (там было что-то по работе с битмапами), или вообще найти реализацию алгоритмов 'noise reduction'...
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 149
19.08.2011, 19:31  [ТС] 3
Этот способ не катит по следующим причинам:
1)Он слишком долгий
2)Если PictureBox меньше рисунка, то рисунок обрежется
3)И вообще это как-то неправильно.
0
Comanche
19.08.2011, 23:32 4
Согласен - я же написал, что это сойдёт лишь для маленьких картинок.
Можно ещё сложить с битмапом-маской при помощи BitBlt - уж это точно быстро будет.
0 / 0 / 0
Регистрация: 02.01.2011
Сообщений: 149
19.08.2011, 23:38  [ТС] 5
Спасибо за ответы. Я нашел решение GetDIBits. Эта функция преобразует из hdc объекта в вид DIB. А уже получение из IPictureDisp hDC - это уже дело техники.
Еще спасибо.
0
1 / 1 / 0
Регистрация: 18.11.2010
Сообщений: 139
22.08.2011, 12:30 6
Насчёт
> Если PictureBox меньше рисунка, то рисунок обрежется
-В PictureBox`e есть свойство AutoSize (Установка по размерам картинки)
0
22.08.2011, 12:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2011, 12:30
Помогаю со студенческими работами здесь

Сохранение изображения, загруженного из файла
Загружаю из файла изображение. public Canvas(String FileName) // загрузка из файла { ...

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

Отображение изображения загруженного с сервера
На форме разместил элемент: &lt;asp:Image ID=&quot;Image1&quot; runat=&quot;server&quot; Width=&quot;200&quot; Height=&quot;200&quot; /&gt; ...

Авторазмер изображения, загруженного в Image
Я загружаю изображение через ImageN-&gt;Picture-&gt;LoadFromFile(OpenDialogN-&gt;FileName). Но открываемое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru