Надпись на картинке Vampyre Imaging

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 14.03.2018 18:02:34

Вместо Tbimap можно использовать TCanvas
нет.
Должна быть использована канва вампирки.
Но учитывая что кода на добавления текста в канве вамприрки нет. Используется битмап.

Но основной проблемой является не Canvas...
чья именно (канва)?
...рисует точно такой-же текст и его можно отправить Вампиру или Timage.
вампиру нет, компоненту TImage - да.
...что при подключении Вампира - Timage, перестаёт работать как надо из-за смены битности
хм... нет. Работают они верно. Согласно ГОСТ.
Соответственно, если в Вашем случае баг обходится вот так FImage.ConvertImages(ifR8G8B8);
бага нет. И это не "обход". Я даю то что "хочет" битмап. "обход" - использование битмапа.

С канвой вампирки было бы проще. Как и в стандартном наборе лазаря. Создали канву для изображения. Нарисовали. И радуемся результату...
Но нет в канве вамприки рисовалки для текста. Точнее - есть возможность, а процедуры нет (функции).
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Надпись на картинке Vampyre Imaging

Сообщение vitaly_l » 14.03.2018 18:10:26

pupsik писал(а):вампиру нет, компоненту TImage - да.

Но проблема бага не в Вампире! А в TImage !!! Потому что: TImage - глючит!!! А не Вампира.
Теперь, понимаете, что глючит при отображении не Вампира, а TImage ?

Даже если TImage отправить его родной Tcanvas, то всё равно глючит не Вампира а TImage при отображении <== вот в чём дилемма, которая появляется при подключении вампира. Проблема, не в пересылке картинки Вампиру, а в отображении её в TImage.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 14.03.2018 18:28:36

Но проблема бага не в Вампире! А в TImage !!!
бага нет. Всё согласно ГОСТ :)

Даже если TImage отправить его родной Tcanvas
вы же сами... :
повторю, рисуй на обычной битмапке, как настоящий Художник:
рисовали на "стандартной" канве. И писали что всё ок.

...его родной Tcanvas, то всё равно глючит не Вампира
хм... а канваса вампира то и нет в коде. Не заметили? Есть попытка сопоставить 2 разных набора компонентов. Есть их "недопонимание". А вот канва вампира не задействована (напрямую). Потому что нет рисовалки текста. Задействуйте канву вампира (добавьте возможность рисовать текст) и будет счастие. Т.е. битмап будет делать то для чего он предназначен - показ изображения из вампира.

Это более упущение разработчика вампирки (рисование текста). Но: возможно эта возможность ему не нужна была, возможно он понадеялся на битмап (стандартный), а возможно .... Это не важно. Нет этого. Поэтому используется обход.

Кстати: если вы сможете предложить более элегантное решение. Милости просим. Потому что мне самому не нравится такое извращение. Сколько лишних действий.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Надпись на картинке Vampyre Imaging

Сообщение vitaly_l » 14.03.2018 18:40:16

pupsik писал(а):Даже если TImage отправить его родной Tcanvas
вы же сами... :
повторю, рисуй на обычной битмапке, как настоящий Художник:
рисовали на "стандартной" канве. И писали что всё ок.

Да!!! Там всё ОК, до тех пор пока не будет подключен Вампир!!
Но, как только будет подключен Вампир, то мгновенно, проявляется БАГ с маской и альфаканалом!
И баг виден только в TImage, т.к. мы подключили Вампир, но ещё не задействовали его.
Теперь понятно, что баг возникает/проявляется в TImage, а не в Вампире?

И если потом, получившийся битмап с помощью TImage отправить в Вампир, то он там сохранится нормальным с красным текстом.
Теперь понятно, что баг возникает/проявляется в TImage, а не в Вампире?

То что Вы мне объясняете я прекрасно понимаю. Теперь попробуйте понять, то, что я пытаюсь Вам показать.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 14.03.2018 19:37:53

То что Вы мне объясняете я прекрасно понимаю.
не уверен. Ну и лано. Пускай будет баг в альфе, или TImage, а может и вампире :)
Это не важно...

Может у вас есть более адекватное решение данной ситуации? Чисто эксперимент. С использованием вампирки...

п.с.
Авось и нароете баг. Что бы поточнее было. А то:
то мгновенно, проявляется БАГ с маской и альфаканалом!
меня смущает "мгновенно". Да и "проявляется". Причину бы этих мгновенных проявлений.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Надпись на картинке Vampyre Imaging

Сообщение vitaly_l » 14.03.2018 19:53:30

pupsik писал(а):Может у вас есть более адекватное решение данной ситуации?

Вы ничего не решили. Баг, как был так и остался.

Вы просто поставили, костыль за счёт конвертации картинки в 24 бита и соответственно автоматического удаления маски.
Сделайте тоже самое в штатном Tcanvas и эффект будет тем-же.

И до этого Вы обнуляли маску, заполняя альфаканал нолями - это не решение.

И не решили проблему, а судя по Вашим ответам, даже не поняли в чём суть проблемы.
А проблем появляется именно в TImage, а не в Вампире. Вампиру пофигу чего Вы ему скормите, 24 или 32,
т.к. при сохранении он и то и другое (и 32 и 24) - сохранит с красным текстом.

А проблема наблюдается именно в TImage, когда ТС пытается вывести текст на экран.
Не выводите текст на экран и при сохранении: и Tbimap, и Tpicture, и Timage и Tcanvas и TImagingCanvas и вампир - вернут правильное изображение с красным текстом.

И только при выводе на экран, который осуществляется силами Timage - проявляется баг, т.к. Timage работает с 24 битами.
И на этом пожалуй всё, т.к. это уже флуд какой-то или флейм, по 10-му разу одно и тоже.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 14.03.2018 20:04:36

vitaly_l я использовал костыль для костыля :)
Если у вас есть предложения получше... Прошу. Только условие - используем вампирку.
Если вы считаете что там баг. Покажите где. Не надо "проявлений"...

Кстати, zub: последний вариант лучше заполнении альфы?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Надпись на картинке Vampyre Imaging

Сообщение zub » 15.03.2018 13:12:23

pupsik
Последний это какой? через поток? не пробовал. имхо хуже

vitaly_l
Я не знаю баг это или нет. незнаю даже чему соответствует полностью прозрачно 0 или 255...
И ты тоже незнаешь. гадаешь.
Чтоб выяснить это можно попробовать глянуть исходный пример в дельфи
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 15.03.2018 14:40:39

zub: затерялось...
Код: Выделить всё
procedure TForm1.ShowText(a_file : string);
var
  ts:TTextStyle;
  ACanvas: TImagingCanvas;
begin
  FImage.LoadFromFile(a_file);
//  FImage.ConvertImages(ifA8R8G8B8);  // как бы не хотелось привести изображение в "желаемый" формат.
//Если быть точнее он все изображения конвертит в 32 бита (звери бывают разные). Конвертация в 24 бита не сильно поможет...
//убираем из кода.... Уже не надо.
  With FBitmap do
  begin
    Canvas.Lock;
    AssignFromImage(FImage);
    ts := FBitmap.Canvas.TextStyle;
    ts.Alignment :=taLeftJustify;
    ts.Layout :=tlTop;

    Canvas.Font.Size := 80;
    Canvas.Font.Quality := fqCleartypeNatural;
    Canvas.Font.Color := ColorButton1.ButtonColor;
    Canvas.TextRect(Rect(0,0, Width, Height),0, 0,'Проверка', ts);
    Canvas.Unlock;
    AssignToImage(FImage); //вампирка "считает"  что в битмапе 32 бита, а имедж толкнул 24. (В коде вампира есть интересные комиты).
// + создается новое дефолтное изображение, которое... что то тут мутноватенько делать выводы.
  end;
  FImage.ConvertImages(ifR8G8B8);//но мы "хотим" 24 бита (спасибо image, если быть точнее не ему). 
{убираем этот затык, уже не надо альфу трогать. Всё корректно.
  ACanvas := TImagingCanvas.CreateForImage(FImage);
  ACanvas.FillChannel(ChannelAlpha, 0);
  ACanvas.Free;}
  Image1.Picture.Graphic.Assign(FImage);
end;


по поводу бага... :):
вариант 1...
Код: Выделить всё
procedure TForm1.PaintLine(a_file : string);
var
  LCanvas: TImagingCanvas;
begin
  FImage.LoadFromFile(a_file);
  LCanvas := TImagingCanvas.CreateForImage(FImage);
  LCanvas.PenColor32 := pcRed;
  LCanvas.PenWidth := 10;
  LCanvas.Line(0, 0, FImage.Width, FImage.Height);
  LCanvas.Free;
  Image1.Picture.Graphic.Assign(FImage);
end;


вариант 2...
Код: Выделить всё
procedure TForm1.PaintLine(a_file : string);
begin
  FImage.LoadFromFile(a_file);
  FBitmap.AssignFromImage(FImage);
  FBitmap.Canvas.Pen.Color := clRed;
  FBitmap.Canvas.Pen.Width := 10;
  FBitmap.Canvas.Line(0, 0, FImage.Width, FImage.Height);
  FBitmap.AssignToImage(FImage);
  Image1.Picture.Graphic.Assign(FImage);
end;   


Хм... БАГ... Я не вижу в этом бага, а вот художники.... :)
Оба варианта делают одно и то же.... Результат будет разный.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Надпись на картинке Vampyre Imaging

Сообщение vitaly_l » 15.03.2018 18:53:58

pupsik писал(а):а вот художники

Баг не здесь. Баг в том что, при подключении Вампира, меняется стандартное поведение TImage и он (Image1) начинает рисовать текст белым даже если картинку загружать силами Image1.LoadFromFile и не пользовать модули вампира. Соответственно баг в том что при подключении Вампира - меняется штатное поведение TImage.

Добавлено спустя 4 минуты 44 секунды:
zub писал(а):Я не знаю баг это или нет. незнаю даже чему соответствует полностью прозрачно 0 или 255...
И ты тоже незнаешь. гадаешь.

Белый (255) - непрозрачный, чёрный (0) - прозрачный. Я про альфу, знал задолго до того как появился Лазарус, т.к. вот это A8R8G8B8 и вот это R8G8B8, обозначения позволяют делать или не делать различные эффекты при монтаже. За счёт наличия или отсутствия альфа прозрачности (маски).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 15.03.2018 19:24:49

меняется стандартное поведение TImage и он (Image1) начинает рисовать текст белым даже если картинку загружать силами Image1.LoadFromFile и не пользовать модули вампира.
слова, слова... Хде код?

А бага нет. Потому что идёт связка 2-х разных по структуре и работе компонентов. Через пятую точку. Которая не предполагает таких доступов. Ведь битмап - отображение для вампира (надо же как то выводить) и не более. Битмап для Image - это уже "родное" стандарту набора компонентов лазаря.

Используя канву - мы не используем пятую точку. А используем всё как и должно быть. Случай с рисованием линии, кажись, не доказывает обратного.

Опять же. Если я в чём то ошибаюсь. Ткните носом в код. Который указывает на ошибку в рассуждениях.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Надпись на картинке Vampyre Imaging

Сообщение vitaly_l » 15.03.2018 19:34:32

pupsik писал(а):слова, слова... Хде код?

Открываете проект Зуба https://yadi.sk/d/HByIdtJK3TBVue и прямо в проекте "комментируете" все вызовы Вампира. После этого делаете Image1.LoadFromFile и пытаетесь на нём (Image1) - сделать красную надпись, силами его Canvas. Но увы надпись на картинке будет белой, т.к. установка Вампира, что-то там подменила в коде.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 15.03.2018 21:09:26

Кста... вампирка ничего не меняет. Пустой проект аналогично реагирует. Серая мышЬ.
В принципе: всё куда проще...
Да и советы на мелкософт сайте чёт от костыля не "отходят"
Мы можем установить AlphaFormat равным 0...

По идее в 64 битке может показать, а может и нет.
Хм... я думал не совместимость наборов, а тут винда 24 битка онли :)
Т.е. где баг?

Добавлено спустя 7 минут 51 секунду:
и судя по дальнейшим весёлостям... Лучше не трогать альфу, а конвертить в 24 бита.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Надпись на картинке Vampyre Imaging

Сообщение vitaly_l » 16.03.2018 16:28:46

pupsik писал(а):Кста... вампирка ничего не меняет. Пустой проект аналогично реагирует. Серая мышЬ.
В принципе: всё куда проще...
Да и советы на мелкософт сайте чёт от костыля не "отходят"
Мы можем установить AlphaFormat равным 0...

По идее в 64 битке может показать, а может и нет.
Хм... я думал не совместимость наборов, а тут винда 24 битка онли
Т.е. где баг?

Добавлено спустя 7 минут 51 секунду:
и судя по дальнейшим весёлостям... Лучше не трогать альфу, а конвертить в 24 бита.

:roll: :arrow: http://www.freepascal.ru/forum/viewtopic.php?f=13&t=27448&start=15#p130639
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Надпись на картинке Vampyre Imaging

Сообщение pupsik » 16.03.2018 18:10:28

vitaly_l хм... А терь поясните:
1. Почему можно или менять альфу, или конвертить.
2. Почему есть (нету) баг(а).

И... желательно код в довесок. ШОБ не скучно было :lol:

п.с.
если уж "пальцем тыкать": прочтите мой первый пост. Думаете я изменил мнение?

Или бум далее толочь воду в ступе?
Или вы написали вспомогательный класс для канвы вампирки (рисование текста) и стесняетесь его показать.?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Пред.След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru