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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2020, 18:58   #1
Fedia74
Пользователь
 
Регистрация: 24.03.2019
Сообщений: 29
По умолчанию Прошу помощи с Bitmap

Здравствуйте.

Прошу помочь разобраться с наложением картинки на некоторый фон с тем условием что бы пиксели накладываемой картинки с чёрным цветом (0 0 0) не закрашивали фон.

Много ковырялся в инете но так и не смог найти рабочей код.

мой вариант такой

a:=TBitmap.Create;
a.assign(ManP[1,1].Bitmap); // Картинку с массива картинок перекидываю в BitMap a для простоты восприятия
//a.Transparent:=true; Пробовал как вариант
//a.TransparentMode:=tmAuto;

a.Transparent := true;
a.TransparentMode := tmFixed;
a.TransparentColor:= clBlack; // $0;

Scr1.Canvas.Draw(x,y,a);

Но к сожалению картинка накладывается полностью без зоны прозрачности ((((( , хотя на картинке очень много чёрного цвета .

Что не так подскажите.

Последний раз редактировалось Fedia74; 13.05.2020 в 19:01.
Fedia74 вне форума Ответить с цитированием
Старый 13.05.2020, 19:58   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Значит пиксели фона не строго чёрные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 13.05.2020, 20:05   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Через scanline рассчитываешь альфа-канал как разность между черным цветом и текущим.
Color4.A:=(abs(color4.b-color.b)+abs(color4.g-color.g)+abs(color4.r-color.r)) div 3;

Через pixels[x,y] -не получится он альфу искажает.
А после того как рассчитала используете AlphaBlend
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 13.05.2020, 21:13   #4
Fedia74
Пользователь
 
Регистрация: 24.03.2019
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Значит пиксели фона не строго чёрные.
А почему пиксели ФОНА ???? Наверно картинки которую на фон кладу ????

В корел фото паинт рисовал картинку там градусник показывал что чёрный 0 0 0.
Fedia74 вне форума Ответить с цитированием
Старый 13.05.2020, 21:14   #5
Fedia74
Пользователь
 
Регистрация: 24.03.2019
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Через scanline рассчитываешь альфа-канал как разность между черным цветом и текущим.
Color4.A:=(abs(color4.b-color.b)+abs(color4.g-color.g)+abs(color4.r-color.r)) div 3;

Через pixels[x,y] -не получится он альфу искажает.
А после того как рассчитала используете AlphaBlend
Огромное спасибо за подсказку , но я в этом новичёк и для меня это тёмный лес , можно пример какой нибудь , что бы изучить его ?
Fedia74 вне форума Ответить с цитированием
Старый 13.05.2020, 21:17   #6
Fedia74
Пользователь
 
Регистрация: 24.03.2019
Сообщений: 29
По умолчанию

В старом добром Турбо паскале была процедурка такая PutImage(x,y,TypePut) где TypePut это тип наложения картинки NormalPut, XorPut и прочее , в Лазарусе есть такое же ?
Fedia74 вне форума Ответить с цитированием
Старый 13.05.2020, 21:32   #7
Fedia74
Пользователь
 
Регистрация: 24.03.2019
Сообщений: 29
По умолчанию

Всё получилось !!!!

Действительно в картинке черные были не чисто черными пикселями , это произошло поскольку JPG уродует , подчистил всё и сохранил в BMP и всё стало, как в проге выше , работать.

Спасибо за помощь !!!!
Fedia74 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помощи Jimoros Общие вопросы C/C++ 0 11.01.2014 23:43