Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение цвета пикселя из TImage (png), Решение проблемы получения цвета пикселя 
V
    Опции темы
Teoden
Дата 28.9.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Создаю на форме объект TImage, далее загружаю в него картинку формата png.
Цитата

Image.Picture.LoadFromFile('Login.png');
ColorStr := ColorToString(Image.Picture.Bitmap.Canvas.Pixels[1,1]);

При попытке получить цвет с помощью Image.Picture.Bitmap.Canvas.Pixels[X,Y] картинка пропадает, а возвращаемый цвет получается $FFFFFF вне зависимости от X и Y.

Решение типа:
Цитата

dc:=GetDC(0);
ColorStr := ColorToString(GetPixel(dc,ClientOrigin.x+Image.Left+ X ,ClientOrigin.y+Image.Top+ Y ));
ReleaseDC(0,dc);

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

Подскажите пожалуйста решение?
PM MAIL   Вверх
Exai1e
Дата 28.9.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Teoden, надо пользовать не кнопкой "цитата" а кнопкой "код", это так на будущее smile


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Snowy
Дата 28.9.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Это потому что битмап пустой.
Скопируй Picture в BitMap через Assign, тогда можешь работать с битмапом.
PM MAIL   Вверх
Teoden
Дата 28.9.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Snowy @ 28.9.2007,  12:38)
Это потому что битмап пустой.
Скопируй Picture в BitMap через Assign, тогда можешь работать с битмапом.

Таким образом:?
Код

   Image.Picture.LoadFromFile('Login.png');
   bm:=TBitmap.Create;
   bm.Assign(Image.Picture.Bitmap);
   ColorStr := ColorToString(bm.Canvas.Pixels[1,1]);


Не помогает. Цвет возвращается все тот же ($FFFFFF), а картинка как пропадала так и пропадает...

Это сообщение отредактировал(а) Teoden - 28.9.2007, 13:09
PM MAIL   Вверх
Snowy
Дата 28.9.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Не Picture.Bitmap, а просто Picture
PM MAIL   Вверх
Teoden
Дата 28.9.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Snowy @ 28.9.2007,  13:36)
Не Picture.Bitmap, а просто Picture

В таком случае вывыливается эксепшн EConvertError с сообщением "Cannot assign a TPicture to a TBitmap"...
PM MAIL   Вверх
Snowy
Дата 28.9.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Логично. Соврал.
Picture.Graphic
картинка в нём, а не в Picture.Bitmap.
Код
var bmp: TBitmap;
begin
  img1.Picture.LoadFromFile('C:\1.jpg');
  bmp := TBitmap.Create;
  bmp.Assign(img1.Picture.Graphic);
  ...
  bmp.free;

PM MAIL   Вверх
Teoden
Дата 28.9.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь. Теперь все работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

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


 




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


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

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