Перейти к содержанию
  • Регистрация
  • 0
ENERGY

Сетка в TimageList - артефакты на картинках. Проголосуйте!

Вопрос

Upd:

Пожалуйста проголосуйте. Думаю это всех касается, т.к. проблема связана и с TImageList и с TImage. 

https://quality.embarcadero.com/browse/RSP-18210

 

 

Сейчас столкнулся с большой проблемой перед самым релизом для заказчика..

17 картинок, разного размера. Сейчас в TImageList  сетка рисуется постоянно при обновлении Source каждой картинки. C каждым разом становится сетка четче.  Если раньше я просто обновлял на новые картинки, и таким образом решал проблему, то сейчас после обновления source картинок сетка остается на многих картинках, причем я даже не закрываю TImageList . Только начинаю замещать одни картинки, на других появляется сетка..

И вот что теперь делать незнаю..

 

Да кстати картинки портятся и в TImage со временем в Design Time.

Сетка означает что картинку много раз масштабируют. Но почему не сохраняют оригинал, это мне не понятно..

Что тут можно придумать?

 

Delphi Berlin Update 2

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

какая сетка в TImageList? как там вообще что рисуется? 

это же просто набор битмапов, из которых по запросу копируются более мелкие битмапы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 часов назад, krapotkin сказал:

какая сетка в TImageList? как там вообще что рисуется? 

это же просто набор битмапов, из которых по запросу копируются более мелкие битмапы

Вот я сам не знаю. Этот  баг меня преследует давно. У меня кстати dpi 150% в системе (в Design time) может с этим связано? А у вас есть такой баг?

Delphi Berlin Update 2, все картинки png 24 bit

Вот скрин, и точно такая же фигня на релизе.

Вот здесь на скрине я только только обновил все картинки на новые, и линии рисуются сразу после добавления картинки на всех других. Чем больше добавляешь (обновляешь Source), тем четче становятся.

 

imagelist.png

 

@RoschinSpb Выручайте пожалуйста, что посоветуете?

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вот сейчас кинул новый чистый список, решил добавить иконки только размером 48x48. Начал добавлять, и уже на 3 иконке начала появляться сетка на уже добавленных иконках. Я даже дизайнер ImageList не закрывал.

 

Я приаттачил зип файл с иконками 48x48, возможно кто-то может проверить у себя, возможно этот баг только у меня? Спасибо.

new.zip

 

Решение проблемы пока такое:

Добавляем картинки в ресурсы, и при старте в OnCreate DataModule загружаем их из ресурсов в ImageList.

 

 

unit DataModule;

interface

uses
  System.SysUtils, System.Classes, FMX.Types, FMX.Controls, System.ImageList, FMX.ImgList,
  FMX.Graphics, System.Types, FMX.MultiResBitmap, System.UITypes;

type
  TImageListHelper = class helper for TImageList
    function Add(aBitmap: TBitmap): integer;
  end;

  TDataMod = class(TDataModule)
    StyleBook: TStyleBook;
    ImageList: TImageList;
    procedure DataModuleCreate(Sender: TObject);
  private
    procedure LoadImagesToImageList;
  public
    { Public declarations }
  end;

var
  gDataMod: TDataMod;

implementation

{%CLASSGROUP 'FMX.Controls.TControl'}

{$R *.dfm}

procedure TDataMod.DataModuleCreate(Sender: TObject);
begin
  LoadImagesToImageList;
end;


// from resource
procedure TDataMod.LoadImagesToImageList;
var
  vBmp: TBitmap;
  i: Integer;

  procedure AddResourceToImageList(const aName: string);
  var
    vRes: TResourceStream;
  begin
    vRes := TResourceStream.Create(hInstance, aName, RT_RCDATA);
    try
      vBmp.LoadFromStream(vRes);
      ImageList.Add(vBmp);
    finally
      vRes.Free;
    end;
  end;

begin
  vBmp := TBitmap.Create;
  ImageList.BeginUpdate;
  try
    for i := 0 to 16 do
    begin
      AddResourceToImageList('i' + i.ToString);
    end;
  finally
    vBmp.Free;
    ImageList.EndUpdate;
  end;
end;

function TImageListHelper.Add(aBitmap: TBitmap): integer;
const
  SCALE = 1;
var
  vSource: TCustomSourceItem;
  vBitmapItem: TCustomBitmapItem;
  vDest: TCustomDestinationItem;
  vLayer: TLayer;
begin
  Result := -1;
  if (aBitmap.Width = 0) or (aBitmap.Height = 0) then exit;

  // add source bitmap
  vSource := Source.Add;
  vSource.MultiResBitmap.TransparentColor := TColorRec.Fuchsia;
  vSource.MultiResBitmap.SizeKind := TSizeKind.Source;
  vSource.MultiResBitmap.Width := Round(aBitmap.Width / SCALE);
  vSource.MultiResBitmap.Height := Round(aBitmap.Height / SCALE);
  vBitmapItem := vSource.MultiResBitmap.ItemByScale(SCALE, True, True);
  if vBitmapItem = nil then
  begin
    vBitmapItem := vSource.MultiResBitmap.Add;
    vBitmapItem.Scale := Scale;
  end;
  vBitmapItem.Bitmap.Assign(aBitmap);

  vDest := Destination.Add;
  vLayer := vDest.Layers.Add;
  vLayer.SourceRect.Rect := TRectF.Create(TPoint.Zero, vSource.MultiResBitmap.Width,
      vSource.MultiResBitmap.Height);
  vLayer.Name := vSource.Name;
  Result := vDest.Index;
end;

end.

 

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Если нажать Export, то в полученном файле тоже сетка будет?

Если сделать двойной клик по Selected Image, появится Multires Bitmap Editor, на нем тоже будет видна сетка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А, вот!
all5.png.18d3886095d690c41fc2fb1b79edae26.png
На сиэтле.
Да, странная картина, еще более странно, что ни кто не замечал такого поведения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@RoschinSpb

Может запостить баг? Или он уже есть?

 

Цитата

Да, странная картина, еще более странно, что ни кто не замечал такого поведения.

Я кстати думал что про него уже все давно знают.. Просто нет времени.. :)

Между прочим картинка  в Timage тоже портится со временем в Design Time.

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 часа назад, ENERGY сказал:

@RoschinSpb

Может запостить баг? 

Не может, а точно. :)

А баг не заметили потому, что проявляется далеко не на всех картинках. Как я понял только на одном, или нескольких оттенках серого (Ц).
Это на сколько я понял из-за того, что при записи TBitmap в поток и последующем восстановлении данные получаются не совсем идентичными.

Вот например если эту процедуру запускать несколько раз, то картинка становится клетчатой

procedure TForm2.UpdateBitmap(var Bitmap: TBitmap);
var
  Stream: TMemoryStream;
begin
  if Bitmap <> nil then
  begin
    Stream := TMemoryStream.Create;
    try
      Bitmap.SaveToStream(Stream);
      FreeAndNil(Bitmap);
      Stream.Position := 0;
      Bitmap := TBitmap.Create;
      Bitmap.LoadFromStream(Stream);
    finally
      FreeAndNil(Stream);
    end;
  end;
end;

Вот, что у меня получилось. Вторая картинка (для сравнения) преобразуется точно также, но как видно не портится.

Demo.png.e1c4aa44aeb05dafd530dc559aef2a4c.png

Так что проблема не в TImageList и не в TImage, а где-то на более глубоком уровне. Добавляю также небольшой демо проектик. Проверял на Windows 10. Интересно что будет на других платформах.

Proj.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

@RoschinSpb

Сетка появляется на всех картинках, без исключения, посмотрите выше, там была оранжевая картинка. Просто на цветных картинках она не сразу "проявляется", а постепенно.

Может вы запостите баг? Просто, вы лучше объясните вероятную причину этого явления, т.к. знаете этот компонент и внутренности FMX гораздо лучше меня, а мы поддержим голосами. Да и к вам будет больше доверия, т.к. вы FireMonkey разработчик, возможно баг сразу запуститься в обработку.

Картинки портятся только при работе в Design Time - так что это в любом случае касается всех платформ. В уже скомпилированной программе они вроде не портятся, если конечно не были до этого испорчены в design time, но не проверял.

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

косяк в том что fmx сохраняет в stream в формате png, то есть все время идет перекодировка картинки. и винда видно что то косячит с альфаканалом. если сделать так 

procedure BitmapSaveToStream(bmp:TBitmap; var Stream: TMemoryStream);
var
  Surf: TBitmapSurface;
begin
  Surf := TBitmapSurface.Create;
  try
    Surf.Assign(bmp);
    TBitmapCodecManager.SaveToStream(Stream, Surf, '.wmp');
  finally
    Surf.Free;
  end;
end;


procedure TForm2.UpdateBitmap(var Bitmap: TBitmap);
var
  Stream: TMemoryStream;
begin
  if Bitmap <> nil then
  begin
    Stream := TMemoryStream.Create;
    try
      BitmapSaveToStream(bitmap, Stream);
      FreeAndNil(Bitmap);
      Stream.Position := 0;
      Bitmap := TBitmap.Create;
      Bitmap.LoadFromStream(Stream);
    finally
      FreeAndNil(Stream);
    end;
  end;
end;

то все красиво. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

ну вот и ответ почему никто не сталкивался )))

сейчас все в PNG изначально картинки юзают 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
9 часов назад, ENERGY сказал:

@RoschinSpb

Сетка появляется на всех картинках, без исключения, посмотрите выше, там была оранжевая картинка. Просто на цветных картинках она не сразу "проявляется", а постепенно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 часа назад, krapotkin сказал:

ну вот и ответ почему никто не сталкивался )))

сейчас все в PNG изначально картинки юзают 

Я использую только PNG и эта проблема связана именно с png картинками (с jpeg такой проблемы нет, я проверил только что).

1 час назад, RoschinSpb сказал:

На баги лучше реагируют на те, которые от официальных юзеров. На баги от работников, тем более бывших реагируют плохо.

У меня пиратка, но если вы не сможете запостить, тогда я сам отправлю.

Мне просто показалось что вы смогли бы технически лучше меня объяснить причину.

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, ENERGY сказал:

У меня пиратка

Про свою, я вообще молчу. :unsure:
Да технически всё понятно, при записи в поток и обратно получаются не идентичные результаты. Проявляется это в редакторе имажелиста потому, что там это происходит чаще чем везде. Там постоянно устанавливается свойство Dormant.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Пожалуйста проголосуйте. Думаю это всех касается, т.к. проблема связана и с TImageList и с TImage. 

https://quality.embarcadero.com/browse/RSP-18210

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Проголосовал, это просто эпик!

---

Сильно подозреваю что баг не на всех компах воспроизводиться.

У меня на виртуалке воспроизводится, надеюсь и у аутсорсеров тоже воспроизведется.

Изменено пользователем Error

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

на андроиде не воспроизводится. было бы еще хорошо на маке проверить. мое мнение - виноват встроенный кодировщик винды который каждый раз по разному пережимает файл. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
14 часа назад, haword сказал:

на андроиде не воспроизводится. было бы еще хорошо на маке проверить. мое мнение - виноват встроенный кодировщик винды который каждый раз по разному пережимает файл. 

А смысл в таких проверках. Если перебрасывать со стрима в стрим - то может и не воспроизводится.

Проблема то возникает только если что-то делать в Design Time. Среда работает только в Windows, поэтому такие иконки будут на всех платформах при конечной сборке. 

 

 

 

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 02.06.2017 в 22:58, ENERGY сказал:

А смысл в таких проверках. Если перебрасывать со стрима в стрим - то может и не воспроизводится.

Проблема то возникает только если что-то делать в Design Time. Среда работает только в Windows, поэтому такие иконки будут на всех платформах при конечной сборке. 

 

 

 

Зря только начал с упоминания TImageList. Подозреваю, что начнут его чинить и в результате испортят.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 02.06.2017 в 22:58, ENERGY сказал:

А смысл в таких проверках. Если перебрасывать со стрима в стрим - то может и не воспроизводится.

Проблема то возникает только если что-то делать в Design Time. Среда работает только в Windows, поэтому такие иконки будут на всех платформах при конечной сборке. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да, проблема в стрим. И скорее всех на уровне ОС Windows. Сама Fire Monkey не занимается кодированием-декодированием png-файлов.

procedure TForm2.UpdateBitmap(var Bitmap: TBitmap);
var
  Stream: TMemoryStream;
begin
  if Bitmap <> nil then
  begin
    Stream := TMemoryStream.Create;
    try
      Bitmap.SaveToStream(Stream);
      FreeAndNil(Bitmap);
      Stream.Position := 0;
      Bitmap := TBitmap.Create;
      Bitmap.LoadFromStream(Stream);
    finally
      FreeAndNil(Stream);
    end;
  end;
end;

При однократном перекодировании артефакты практически не заметны так что на других платформах это не столь критично.

Заметно становится только при многократном перекодировании, что и происходит в IDE. Есть кто с честной версией? Может продублируете багрепорт со ссылкой на https://quality.embarcadero.com/browse/RSP-18210.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Если я правильно понял, то таких багов уже зарепортена толпа. Начиная от того, что каждое сохранение формы со StyleManager (даже если на форме вообще ничего не трогали) приводит к практически полному изменению картинок в стиле. В любой системе контроля версий это видно великолепно. Задалбывает каждый раз выборочно ревертить изменения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
15 часов назад, kami сказал:

Если я правильно понял, то таких багов уже зарепортена толпа. Начиная от того, что каждое сохранение формы со StyleManager (даже если на форме вообще ничего не трогали) приводит к практически полному изменению картинок в стиле. В любой системе контроля версий это видно великолепно. Задалбывает каждый раз выборочно ревертить изменения.

Картинки меняются даже в Delphi 6 (не XE6), но вот заметных артефактов не наблюдается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Не знаю... ни в D7, ни в D2010 не  сталкивался с изменением dfm-ок в плане картинок. В том числе - в ImageList.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, kami сказал:

Не знаю... ни в D7, ни в D2010 не  сталкивался с изменением dfm-ок в плане картинок. В том числе - в ImageList.

потому что там картинки хранятся так как есть, то есть в каком формате закинули на форму, и если timage понимает его, то в таком формате оно и будет лежать. в fmx я так понимаю, все преобразовывается в png при перемещении через стрим. то есть не помещается то что было в стрим а с начало преобразовывается в png, потом заливается в стрим, потом читается от туда и располагается на форме. я подозреваю сделали это для того что бы сохранять прозрачность изображений. идея то в принципе верная НО кто же знал что винда косячит. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От x11
      Не могу понять, что случилось в проекте с TDataModule.
      Проект мультиплатформенный. В прошлый раз сохранил, закрыл, ничего необычного. Сегодня открываю, а мне ошибку Delphi Berlin показывает.
       
      И действительно, у TImageList отсутствует свойство source. Открываю, а он выглядит по-другому, как будто из VCL.
      Закрываю проект, создаю мультиплатформенную форму, кладу TImageList на форму и о чудо - совершенно другой TImageList и свойство Source есть.
      Что случилось с моим TDataModule? Как среде дать понять, что это мультиплатформенный проект?

    • От x11
      Не знаю, куда правильно задать вопрос. Решил здесь.
      Обычная стандартная связка TImageList + TActionList+TSpeedButton.
      в TImageList загрузил картинку 32*32.
      Всё связал и она появилась у кнопки на панели.
      Обратил внимание, что картинка 32*32 маловата и я решил загрузить картинку 48*48.
      Удалил из TImageList картинку и загрузил новую. Но размер картинки на кнопке остался 32*32.
      А потом ещё и исчезла картинка из TActionList.
       
      В TImageList только одна картинка.
      Delphi Berlin.


    • От DrMzi
      Доброго времени суток!
      Собираю тестовый проект под Win, иконки вижу.
      C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Multi-Device Samples\User Interface\ListView\ListViewImageIndex
      Собираю тестовый проект под Android, иконок нет.
      Что я делаю не так ?

      Поправка. Такое поведение у apk на xiaomi mi5, запустил на Philips Xenium - иконки есть. 
       
    • От ENERGY
      Меня это проблема преследует со времен VCL...
      Подскажите как же ее решить...
      FMX TListView - ItemAppearanceName = ImageListItem.   Лежит fmx TimageList, в настройках указано 16x16 и прорачный цвет clNone, добавил одну иконку 16x16 с прозрачностью. Если запустить под Windows 10  все ок. Если запустить под Android то при выделении (selected) вместо прозрачности белый цвет. В результате иконка некрасиво обрамлена в белом квадрате.. Иконку делал в Axiallis IconWorkShop, сохранил как ico,  Пробовал заливать белым вместо прозрачного, и затем ставить в TimageList белый как прозрачный - тоже самое...
      Что же делать...
    • От RoschinSpb
      Статья: http://community.embarcadero.com/blogs/entry/timagelist101ru-1 Автор: Сергей Рощин Обзор новых возможностей, которые появились в компоненте и редакторе TImageList для Delphi R101 (2016 год, Version 24)
    • От FAN
      Очень нравится timagelist, большое спасибо!
      Но хотелось бы иметь возможность выбрать несколько destination images и отредактировать их свойства
      Также хотелось бы добавлять destination images не по одиночке а группами с заданными свойствами
       
       
       
    • От AndroidHalfNoob
      Что то не могу догнать: загрузил в ImageList 2 картинки, а вот в ListView не получается их засунуть.
      var  LItem: TListViewItem;

      если прописываю прямой путь к файлу на компе, то все работает
       


    • От Vitaldj
      Коллеги, появился TImageList и это очень хорошо. Но не совсем понятно до конца как он работает? К простой кнопке я его прикрутил TButton, и он картиночка отобразилась влева. Но мне совсем не нравиться вид ее! Она какая то маленькая и отступ слава маловат. Вот для примера посмотрите, наверху кнопка с иконок сделана по старому, положил TImage, а внизу по новому, через TImageList.
      Как менять параметры отображения у TButton?

      А, еще прикол! В маке она вообще не отображается!!! ))


    • От ovk
      Прошу помощи,как вывести иконки в ListView которые хранятся в StyleBook ?
      у меня есть база,в ней хранятся ID иконок, которые нужно выводить,в StyleBook лежат иконки, может у кого есть подобный опыт?!
    • От 7profy
      Имеем: FireMonkey приложение (в XE5).
      Создаем TStyleBook в котором существуют несколько TImage (по типу TImageList). Бросаем на форму кнопочку TSpeedButton. Вопросы:
      Возможно ли на этапе Design-time прикрутить изображение из StyleBook на эту кнопочку? Аналогично "прикрутить" изображение к TAction?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...