Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по доступу к битовой матрице изображения 
:(
    Опции темы
gif0
  Дата 27.12.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 6.11.2009

Репутация: нет
Всего: нет



Я загружаю изображение (JPG или GIF) в компонент типа TImage и в коде пытаюсь получить доступ к битовой матрице изображения:

Код

Image1->Canvas->Pixels[0][0] = clBlack;


При запуске приложения выскакивает ошибка: Project Project1.exe raised exception class EInvalidOperation with message 'Can only modify an image if it contains a bitmap'.

Почему, и как это исправить?

Это сообщение отредактировал(а) gif0 - 27.12.2009, 17:53
PM MAIL   Вверх
artsb
Дата 27.12.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



По-моему, всё логично. У JPG и GIF нет битовой матрицы. Вам нужно перегнать изображение в битмап, произвести операции, а потом обратно в нужный формат.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
smoke_man
Дата 27.12.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Как пример:
Код

TJPEGImage *image = new TJPEGImage();
image->LoadFromFile("example.jpg");
Image1->Picture->Bitmap->Assign(image);
Image1->Canvas->Pixels[0][0] = clBlack;
.....
delete image;



--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
gif0
Дата 27.12.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 6.11.2009

Репутация: нет
Всего: нет



artsb, как перегнать изображение в битмап?

smoke_man , а как сделать этот код универсальней, что бы можно было не только JPG загружать?

Это сообщение отредактировал(а) gif0 - 27.12.2009, 19:22
PM MAIL   Вверх
smoke_man
Дата 27.12.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Насколько я знаю компонент Image поддерживает ico, jpg,bmp. GIf поддерживается с 2007, могу конечно ошибаться. И все равно какой бы ты формат не грузил  - для доступа к битовой матрице придется преобразовывать его в bmp, если работать с компонентом Image. Можно, например, по расширению файла вызывать тот или иной метод преобразования.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
artsb
Дата 27.12.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(gif0 @  27.12.2009,  19:11 Найти цитируемый пост)
как перегнать изображение в битмап?

smoke_man выше написал.
Цитата(gif0 @  27.12.2009,  19:11 Найти цитируемый пост)
а как сделать этот код универсальней, что бы можно было не только JPG загружать?

ИМХО никак.
Цитата(smoke_man @  27.12.2009,  20:41 Найти цитируемый пост)
Насколько я знаю компонент Image поддерживает ico, jpg,bmp.

ещё EMF и WMF. smile

gif0, для работы с любыми другими форматами, кроме BMP, нужно подключать соответствующие модули. Для JPG такой уже есть. А вот для GIF, PNG и т.п. придётся искать.

Это сообщение отредактировал(а) artsb - 27.12.2009, 20:53


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
gif0
Дата 27.12.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 6.11.2009

Репутация: нет
Всего: нет



Спасибо, разобрался
PM MAIL   Вверх
gif0
Дата 27.12.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 6.11.2009

Репутация: нет
Всего: нет



Еще вопрос, как можно Image1->Canvas->Pixels[0][0] присвоить значение цвета? Может, есть функция, принимающая три значения (Red,Green,Blue) и возвращающая значение типа TColor, что-то вроде этого:
TColor a =  RGB(5,20,1);
Image1->Canvas->Pixels[0][0] = a;


Это сообщение отредактировал(а) gif0 - 27.12.2009, 22:32
PM MAIL   Вверх
artsb
Дата 27.12.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(gif0 @  27.12.2009,  22:30 Найти цитируемый пост)
что-то вроде этого:

это оно и есть.
Только можно так:
Код

Image1->Canvas->Pixels[0][0] = (TColor)RGB(5,20,1);


Это сообщение отредактировал(а) artsb - 27.12.2009, 22:49


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mrbrooks
Дата 28.12.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(artsb @  27.12.2009,  20:50 Найти цитируемый пост)
Цитата(gif0 @  27.12.2009,  19:11 Найти цитируемый пост)
а как сделать этот код универсальней, что бы можно было не только JPG загружать?

ИМХО никак.


Ну по чему же. Кто же нам запрещает определять расширение файла - и собственно - по этому расширению использовать соответствующую библиотеку.
PM MAIL   Вверх
artsb
Дата 28.12.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



А. Ну если только так. smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.