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).

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