pupsik
Спасибо, вопрос решен
Добавлено спустя 1 минуту 49 секунд:
хотя выглядит тоже костыльно - канал заполняется 255 при конвертации, потом ручками сбрасываем его в 0... но всеже лучше чем править чужие исходники
Модератор: Модераторы
zub писал(а):т.е. при копировании из TMultiImage в TPicture добавляется альфаканал, заполняемый значением 255. если исходники Vampyre поправить и заполнить альфу нулем, то все начинает работать.
Это ведь не баг, как можно обойти без правки Vampyre?
хотя выглядит тоже костыльно - канал заполняется 255 при конвертации, потом ручками сбрасываем его в 0
а где логика? Получается что вампирка не загружает изображения? Ведь в вампирке всегда есть альфа канал. Знч.... она не может загружать изображения. И вот имедж ждёт, а вампирка не даётСоответственно тогда исчезнет глюк в Timage, т.к. ему подадут 24 бита
pupsik писал(а):ifA8R8G8B8
pupsik писал(а):Ведь в вампирке всегда есть альфа канал
pupsik писал(а):а где логика?
zub писал(а):Вместо пустых слов отладчик в руки и вперед
zub писал(а):Прикинь, она изначально 24 битная, в ifA8R8G8B8 она конвертится в момент TPicture.Graphic.Assign(TMultiImage);, уж незнаю по какой причине
И самое главное, я Вам писал, что Вампир там что-то переопределил в Tbitmap и его глючит, т.к. если я создаю НОВЫЙ проект, то текст рисуется правильно (красным). А если я беру Ваш проект (с Вампиром), то текст ДАЖЕ БЕЗ ПОДКЛЮЧЕНИЯ TMultiImage и юнитов Вампира - рисуется серым или белым. Конкретно в вашем проекте, Вампир подменил какие-то установки для Tbitmap, Tpicture, Timage. Вот на это обратите внимание и возможно найдёте сбой. Попробуйте например, создать новый проект и не устанавливать в него Вампир, а только подключить юнит с TMultiImage. Чтобы Вампир не смог переопределить установки для Tbitmap, Tpicture, Timage. <== Вот как-то так.
zub писал(а):какаято хрень, какаято маска, чтото глючит... это не указал. это даже не угадал. кокраз некоторые нашли причину и некоторые предложили как ее обойти
vitaly_l писал(а):zub писал(а):
Как надо сделать описано в первом посте. Есть TMultiImage с картинкой, в него надо вписать цветной текст и отдать обратно. ферштейн?
Ты пишешь текст на экранный канвас, мне нужно писать на "чтото" в памяти, не асоциированое с устройством отображения. ферштейн?
Это наверное очень удивит, но стоит мне загрузить ваш проект, как перестаёт работать Timage. Однако, если я создаю новый проект, загружаю картинку и там рисую текст в Timage, то он рисуется красным на картинке. Но стоит мне тоже самое сделать в вашем проекте, как текст начинает рисоваться белым. Вы как-то там поломали Timage или точнее какие-то запчасти от него, когда подключали Vampyre. Я при тесте Timage даже не подгружаю TMultiImage в вашем проекте и закомментировал его юниты, но всё равно если беру ваш проект то рисуется белым. А если создаю новый проект, то в Timage всё работает и текст рисуется красным. ферштейн, кто всё поломал?
Добавлено спустя 111 час 111 минут 111 секунд:
zub писал(а):
Проблема оказалась чуток не тут. если LImg сохранить в файл, то там надпись красная
Попробуйте сохранить img и удивитесь ещё больше, т.к. текст вообще будет то серым, то красным (в зависимости где смотреть). Такое возможно из-за разной битности или иных цветовых установок у Vampyre и TImage. И похоже Vampyre, как-то "подменил" установки битности по умолчанию у TImage и последнего от этого сильно глючит, тогда дело не в маске а в битности. Короче проблема в разной битности получаемых и обрабатываемых картинок, т.к. лазарус по умолчанию работает только с 24 битами, а Vampyre с 32. + ещё маска
zub писал(а):ты выложишь эти 2 проекта?
var
ts:TTextStyle;
bmp:TBitmap;
begin
Image1.Picture.LoadFromFile('balalayka.jpg');
bmp:=TBitmap.Create;
bmp.Height:=Height;
bmp.Width:=Width;
ts:=bmp.Canvas.TextStyle;
bmp.Assign(Image1.Picture.Bitmap);
bmp.Canvas.Font.Size:=111;
bmp.Canvas.Font.Quality:=fqCleartypeNatural;
bmp.Canvas.Font.Color:=clRed;
bmp.Canvas.TextRect(Rect(0,0,bmp.Width,bmp.Height),0,0,'TEST',ts);
Image1.Picture.Bitmap.Assign(bmp);
bmp.freee ;)
procedure TForm1.ShowText(a_file : string);
var
ts:TTextStyle;
ACanvas: TImagingCanvas;
begin
FImage.LoadFromFile(a_file);
// FImage.ConvertImages(ifA8R8G8B8); // как бы не хотелось привести изображение в "желаемый" формат
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;
pupsik писал(а):Я вообще писал о канве
pupsik писал(а):указать что в коде не верно
pupsik писал(а):FImage.ConvertImages(ifR8G8B8);
А я искал баг и причину того что...
чаво? Канва вампира не может рисовать текст (зуб это заметил ранее )... Её надо модифицировать, улучшить и т.д... В принципе она может рисовать текст. Только нет процедуры рисованиянесмотря на то что текст стал рисоваться TImagingCanvas.
эво как...Я искал причину порчи нормальной работы, ШТАТНЫХ: Tbimap, Tpicture, Timage, TCanvas
pupsik писал(а):чаво? Канва вампира не может рисовать текст
хм...: TImagingCanvas = class(TObject). В принципе схожесть есть но не то.И я не удивлюсь если выяснится что она(TCanvas) и для TImagingCanvas является основой.
я, для себя ответ нашёл. Хотя и не считаю верным использование битмапа, а не канвы. Но: если использование канвы влечёт за собой некоторые сложности. Пускай будет битмап.Шо ж там так закручено что "теряет" цвет при игре с битмапом?
не перестаёт......ШТАТНАЯ TCanvas перестаёт рисовать красным.
нет.../ альфаканалом. <== вот причина
тогда надо срочно убрать TFPCustomCanvas. Чё он под ногами ковыряетсяа использование TImagingCanvas <== это костыль
pupsik писал(а):использование битмапа - тот ещё костыль.
pupsik писал(а):TImagingCanvas = class(TObject).
Сейчас этот форум просматривают: Yandex [Bot] и гости: 16