Jump to content
Sign in to follow this  
s.fedotenko@gmail.com

[TfgBitmap] Возникает исключение при последовательном задании размеров

Recommended Posts

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

При установке размеров битмапа через свойства .Width и .Height происходит исключение:

674182187_.png.7f7f9c04bf9ba7559d2427202491cb81.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Через свойство .Size - размеры устанавливаются нормально.

Share this post


Link to post
Share on other sites
1 час назад, s.fedotenko@gmail.com сказал:

При установке размеров битмапа через свойства .Width и .Height происходит исключение:

Разобрался: исключение возникает, так как устанавливается размер одной из сторон, когда другая сторона битмапа еще равна 0. Правильно изначально устанавливать размеры обоих сторон вместе через свойство .Size.

Это непривычно, т.к. в обычном TBitMap (на Delphi) начальное задание размеров через Width и Height не вызывало исключений или был понятный метод .SetSize

Edited by s.fedotenko@gmail.com

Share this post


Link to post
Share on other sites

Действительно, было сделано так, чтобы битмап не мог иметь нулевой размер. Это связано с ограничением Андроида. Но нет проблемы, чтобы удалять нативный битмап, если размер по одной стороне нулевой.

Исправлено в 1.0.4.0.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Similar Content

    • By Stas
      Здравствуйте, обнаружил неприятную особенность отрисовки текста.
      Охватило меня желание нарисовать текст в круге.
      procedure TFormMain.fgButton1Tap(Sender: TObject); var B:TfgBitmap; Sz:Integer; begin B:=TfgBitmap.Create; Sz:=128; B.Size:=Tsize.Create(Sz,Sz); B.Canvas.Fill.Color:=TAlphaColorRec.Green; B.Canvas.FillCircle(B.Size.cx/2,B.Size.cy/2,B.Size.cx/2); B.Canvas.Font.Size:=Sz/2; B.Canvas.Fill.Color := TAlphaColorRec.Red; B.Canvas.Fill.Kind := TfgBrushKind.Solid; B.Canvas.FillText(B.Bounds,'100',False); TfgAssetsManager.Current.AddBitmap('test',B); fgImage1.ImageName:='test'; end; И показать его на картинке.
      И не получилось
      Спасибо

    • By s.fedotenko@gmail.com
      Здравствуйте.
      Имеем код:
      procedure TFormMain.fgPaintBox1Paint(Sender: TObject; const ACanvas: TfgCanvas); var aBm: TFgBitMap; begin try aBm := TFgBitMap.Create; aBm.Size := Tsize.Create(round(fgPaintBox1.Width), round(fgPaintBox1.Height)); aBm.Canvas.FillColor(TAlphaColorRec.Gray); aBm.Canvas.Stroke.Kind := TfgBrushKind.Solid; aBm.Canvas.Stroke.Color := TAlphaColorRec.Red; aBm.Canvas.Fill.Kind := TfgBrushKind.Solid; aBm.Canvas.Fill.Color := TAlphaColorRec.Yellow; aBm.Canvas.DrawCircle(aBm.Width / 2, aBm.Height / 2, aBm.Width / 2); ACanvas.DrawBitmap(aBm, 0, 0); finally aBm.DisposeOf; aBm := nil; end; end; Скэйл устройства =2.
      получили результат:

      Два вопроса:
      1. на PaintBox битмап выводится с размерами в 2 раза меньше. Насколько я понял это связано со скэйлом устройства, и что бы битмап отобразился на весь PaintBox на экране, нужно задавать физические размеры битмапа в 2 раза (для данного устройства) больше. Где можно узнать скэйл устройства, что бы задать размеры битмапа соответствующие выводу на PaintBox? 
      2. Не очень понятно, почему примитивы на битмапе рисуются со скэйлом устройства?  
    • By Stas
      Добрый день
      S:=TMemoryStream.Create; try Bitmaps.Bitmaps[1].SaveToStream(S); Bitmaps.Bitmaps[1].SaveToFile(TPath.GetTempFileName+'.jpg'); //Файл 0 байт S.Position:=0; S.SaveToFile(TPath.GetTempFileName+'.jpg');// Файл 4мб finally S.Free; end; Внимание вопрос, почему ?
      Спасибо
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...