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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2011, 22:19   #1
Yazon2006
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 20
Восклицание Проблема при загрузке на форму прозрачного gif изображения!

При загрузке gif картинки на форму получаеться отображение только чёрного квадрата. Все gif грузяться нормально, за исключением тех, у которых прозрачный фон. Прозрачность заменяеться чёрным цветом, и т.к. картинка у меня состоит из чёрного цвета и прозрачного фона, то всё отображаеться чёрным Получилось октрыть на форме только с помощью компонента из библиотеки Jedi название кажеться JvGifAnimate, но это совсем не то, что мне надо, поскольку мне надо работать с канвой, например в TGif компоненте, что в GifImg в Delphi 2010.
Вариант открыть в фотошопе, сделать белый фон и дальше работать не проходит, т.к. весь процесс должен быть автоматизирован по причине обработки тысячи картинок...
Может кто сталкивался с такой проблемой, или просто знает в чём дело. Поиск юзал, не нашёл
Спасибо!
Yazon2006 вне форума Ответить с цитированием
Старый 01.07.2011, 22:36   #2
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Попробуйте вот этот компонент. Отлично поддерживает прозрачность.
На Delphi XE отлично работает, наверное и на Delphi 2010 подойдет.
Вложения
Тип файла: rar Gif.rar (276.1 Кб, 77 просмотров)

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 01.07.2011, 23:09   #3
Yazon2006
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 20
По умолчанию

Отлично! Спасибо, прозрачность отображаеться как надо. Но с канвой всё равно работать не могу. Например, превратить изображение в двумерный масив 0 и 1, вот так:
Код:
for i := 1 to 40 do
 begin
 for j := 1 to 80 do
  begin
   c:=image1.Picture.Bitmap.Canvas.Pixels[i,j];
   memo1.Text:=memo1.Text+inttostr(c);
  end;
  memo1.Text:=memo1.Text+#10#13;
 end;
не получилось, вывело всё -1, это как я понимаю ошибка. Что я не так делаю?

Вот кстати картинка, что бы попробовать:
http://www.newrpg.ru/diz/img_dob.php...975&1308868799

Последний раз редактировалось Yazon2006; 01.07.2011 в 23:15.
Yazon2006 вне форума Ответить с цитированием
Старый 01.07.2011, 23:22   #4
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

А если так :

Код:
c:=image1.Picture.Bitmap.Pixels[i,j];

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 01.07.2011, 23:31   #5
Yazon2006
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 20
По умолчанию

Нет, ругается, что после Bitmap должно быть ещё что-то. Может есть какой то более изощрённый метод, т.е. не обязательно его в виде текста делать, может как то иначе. В конечном результате мне надо узнать есть ли на рисунке определённый символ путём сравнение с эталоном.
Yazon2006 вне форума Ответить с цитированием
Старый 01.07.2011, 23:42   #6
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Вроде так :

Код:
for i := 1 to Image1.Picture.Graphic.Width do
 begin
 for j := 1 to Image1.Picture.Graphic.Height do
  begin
   c:=image1.Picture.Bitmap.Canvas.Pixels[i-1,j-1];
   memo1.Lines.Add(inttostr(c));
  end;

 end;
А дальше разбираться надо. Вот для инф.
http://www.sql.ru/forum/actualthread...=20&tid=818970

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 01.07.2011, 23:58   #7
Yazon2006
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 20
По умолчанию

Ок, буду дальше разбираться, спасибо за помощь!!!
Yazon2006 вне форума Ответить с цитированием
Старый 03.07.2011, 02:25   #8
Yazon2006
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 20
По умолчанию

Покопался, нашёл, в чём особенность данных картинок. Они в 8 битном формате, в режиме индексированных цветов, при чём в таблице цветов есть чёрный цвет №1, чёрный цвет №2, белый цвет, и прозрачный цвет. Ни единого белого пикселя я не нашёл на картинке, зато с чёрными оказалось приятное обстоятельство, что в конечном итоге, мне удалось получить изображение очищенное от шума и пыли с помощью фотошопа.

Вопрос 1: как это сделать програмно? (изменить таблицу цветов)
Вопрос 2: как работать с такими изображениями? (как определить цвет(индекс) пикселя с координатами i,j)

В конце концов мне надо определить с некоторой точностью есть ли на изображении эталон. Т.е. распознать символы сравнив с эталоном.


Yazon2006 вне форума Ответить с цитированием
Старый 04.07.2011, 18:08   #9
Yazon2006
Пользователь
 
Регистрация: 03.12.2010
Сообщений: 20
По умолчанию

Всё, сделал. Если кому интересно:

Код:
FOR j := 0 TO gif.bitmap.Height-1 DO
     BEGIN
       Row := pByteArray(gif.Bitmap.Scanline[j]);
       FOR i := 0 TO gif.Bitmap.Width DO
       BEGIN
         memo1.Text:=memo1.Text+inttostr(Row[i]);
       END;
       memo1.Text:=memo1.Text+#13#10;
     END;
Получил следующее:



Как видим чёрный цвет №3 представлен здесь 2, и дальше легко можно работь с образами чистых цифр.

Последний раз редактировалось Yazon2006; 04.07.2011 в 18:32.
Yazon2006 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при загрузке изображения asp1k Общие вопросы Delphi 3 01.02.2011 23:02
Проблема при загрузке ПК. Натулёк Операционные системы общие вопросы 2 06.09.2010 11:29
Ошибка при загрузке изображения artemavd Общие вопросы Delphi 3 13.04.2010 16:41
ПРоблема при загрузке Digi Помощь студентам 4 29.11.2009 15:44
Проблема при загрузке ХР Женя2 Windows 7 30.08.2009 23:02