powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему происходит искажение глифа при вставке в канву?
55 сообщений из 55, показаны все 3 страниц
Почему происходит искажение глифа при вставке в канву?
    #39190503
Пытливый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот глиф до вставки и после. Разница очевидна. Что я делаю не так?
Код: pascal
1.
2.
3.
4.
5.
Bmp := TBitmap.Create;
 Bmp.Transparent := True;
 cxImageList1.GetImage(1, Bmp);
 Canvas.Draw(P.X, P.Y, Bmp);
 Bmp.Free;
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190507
Пытливый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Че-то фигня какая-то с прикладыванием картинки творится, выбирается файл, а в тему не вставляется.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190528
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытливый,
У тебя там скорее всего png с прозрачным краем и в bmp он преобразуется очень криво.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190532
Сергей N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте заменить вывод значка из ImageList на канву функцией ImageList_DrawEx из CommCtrl (гораздо более быстрый способ):

Код: pascal
1.
2.
 ImageList_DrawEx(cxImageList1.Handle, {индекс значка} 1, Canvas.Handle, P.X, P.Y,
                           cxImageList1.Width, cxImageList1.Height, CLR_NONE, CLR_NONE, ILD_NORMAL);



P.S. Из моего общего опыта, у меня периодически возникали подобные казусы при работе с cxImegeList разных версий. При возможности (почти всегда) я использую либо стандартный ImageList, либо TPngImageList из дополнительной библиотеки PngComponents (работаю в D2007).
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190551
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Сергей NПопробуйте заменить вывод значка из ImageList на канву функцией ImageList_DrawEx из CommCtrl (гораздо более быстрый способ):

Код: pascal
1.
2.
 ImageList_DrawEx(cxImageList1.Handle, {индекс значка} 1, Canvas.Handle, P.X, P.Y,
                           cxImageList1.Width, cxImageList1.Height, CLR_NONE, CLR_NONE, ILD_NORMAL);



P.S. Из моего общего опыта, у меня периодически возникали подобные казусы при работе с cxImegeList разных версий. При возможности (почти всегда) я использую либо стандартный ImageList, либо TPngImageList из дополнительной библиотеки PngComponents (работаю в D2007).

А у меня наоборот, при использовании cxImageList проблем с прозрачностью нет, а вот ImageList по-простому не выведешь
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190554
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меланхолично...
А ведь битмапы с альфа-каналом существуют хрен знает с какой древности.
Вот чего стоило встроить их поддержку в генофонд, всего то одну функцию при отрисовке заменить и подправить конвертацию из других graphic-ов.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190555
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Соколинский БорисМеланхолично...
А ведь битмапы с альфа-каналом существуют хрен знает с какой древности.
Вот чего стоило встроить их поддержку в генофонд, всего то одну функцию при отрисовке заменить и подправить конвертацию из других graphic-ов.
так в современных версиях Дельфей вроде как с альфа-каналом в битмапе нету проблем ?
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190559
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,
судя по первому посту есть.
Может, конечно, это DE косячит с конвертацией, не проверял.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190580
errorsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

Есть к сожалению.
Загрузить в TImageList без искажений в дизайнтайме полупрозрачную иконку невозможно.
Даже если загрузить в рантайме, но использовать TButton с иконкой - все равно проблемы - внутри TButton внутренний TImageList, в который немного криво копируются иконки из используемого ImageList.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190582
errorsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытливый,

Я написал эту функцию для получения действительно корректно полупрозрачного битмапа из TImageList, возможно для TcxImageList тоже подойдет:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
function ImageListGetBitmap(ImageList: TCustomImageList; Index: Integer; Bitmap: TBitmap): Boolean;
var
  Info: TIconInfo;
  DC: HDC;
  Icon: TIcon;
begin
  Result := (Bitmap <> nil) and ImageList.HandleAllocated and (Index > -1) and (Index < ImageList.Count);

  if Result then
    if (ImageList.ColorDepth <> TColorDepth.cd32Bit) then
      Result := ImageList.GetBitmap(Index, Bitmap)
    else
    begin
      Bitmap.SetSize(0, 0);
      // set alpha bitmap
      Bitmap.PixelFormat := TPixelFormat.pf32bit;
      Bitmap.AlphaFormat := TAlphaFormat.afDefined;
      // clear bitmap
      Bitmap.Canvas.Brush.Color := 0;
      Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
      // new size
      Bitmap.SetSize(ImageList.Width, ImageList.Height);

      // create icon
      Icon := TIcon.Create;
      DC := 0;
      Info.hbmMask := 0;
      Info.hbmColor := 0;
      try
        // get icon
        ImageList.GetIcon(Index, Icon);
        GetIconInfo(Icon.Handle, Info);

        // select icon bitmap to dc
        DC := CreateCompatibleDC(Bitmap.Canvas.Handle);
        SelectObject(DC, Info.hbmColor);

        // copy icon to bitmap
        BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height,
          DC, 0, 0, SRCCOPY);
      finally
        DeleteDC(DC);
        DeleteObject(Info.hbmMask);
        DeleteObject(Info.hbmColor);
        Icon.Free;
      end;
    end;
end;
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190585
errorsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
errorsoft,

В процессе переписывания лишние строчки появились, исправленный вариант:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
function ImageListGetBitmap(ImageList: TCustomImageList; Index: Integer; Bitmap: TBitmap): Boolean;
var
  Info: TIconInfo;
  DC: HDC;
  Icon: TIcon;
begin
  Result := (Bitmap <> nil) and ImageList.HandleAllocated and (Index > -1) and (Index < ImageList.Count);

  if Result then
    if (ImageList.ColorDepth <> TColorDepth.cd32Bit) then
      Result := ImageList.GetBitmap(Index, Bitmap)
    else
    begin
      Bitmap.SetSize(0, 0);
      // set alpha bitmap
      Bitmap.PixelFormat := TPixelFormat.pf32bit;
      Bitmap.AlphaFormat := TAlphaFormat.afDefined;
      // new size
      Bitmap.SetSize(ImageList.Width, ImageList.Height);

      // create icon
      Icon := TIcon.Create;
      DC := 0;
      Info.hbmMask := 0;
      Info.hbmColor := 0;
      try
        // get icon
        ImageList.GetIcon(Index, Icon);
        GetIconInfo(Icon.Handle, Info);

        // select icon bitmap to dc
        DC := CreateCompatibleDC(Bitmap.Canvas.Handle);
        SelectObject(DC, Info.hbmColor);

        // copy icon to bitmap
        BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height,
          DC, 0, 0, SRCCOPY);
      finally
        DeleteDC(DC);
        DeleteObject(Info.hbmMask);
        DeleteObject(Info.hbmColor);
        Icon.Free;
      end;
    end;
end;
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39190589
Пытливый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся. Прекрасно сработал вариант от Сергея. С ним даже компактнее выходит, битмап не надо создавать промежуточный.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191025
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VCL изначально не умеет нормально работать с альфаканалом. Поэтому пытаться отрисовать таковое средствами канвы чревато. И 32-битный bmp файл - это скорее "борландовское изобретение" стандартные виндовские программы его не понимаю и не используют. Более того я на вскидку не скажу какая программа при сохранении позволит сохранить в bmp с альфаканалом.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191044
Сергей N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger, с чего Вы взяли, что 32-битный bmp файл - это скорее "борландовское изобретение"? Поддержка BMP с битностью 1, 2, 4, 8, 16, 24, 32, 48 и 64 интегрирована в операционные системы Windows. Борланд, если что и сделал, то постарался облегчить работу с API-функциями при работе с графикой. Редактировать и сохранять bmp c альфа-каналом можно в различных программах для работы с графикой, например, всем известном, Photoshop. Другое дело, что в обычной программе для просмотра Вы не увидите прозрачности, но это не значит, что ее там нет и ее нельзя использовать в собственных программах. При работе на уровне API Вам все равно придется иметь дело с BITMAP. Однако, по-сути, данный вопрос выходит за рамки этого топика.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191053
errorsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger,

Согласен с предидущим коментарием - 32-битный BITMAP это вполне стандартная фича WinApi, другое дело что далеко не все программы его поддерживают.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191247
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Nwhite_nigger, с чего Вы взяли, что 32-битный bmp файл - это скорее "борландовское изобретение"? Поддержка BMP с битностью 1, 2, 4, 8, 16, 24, 32, 48 и 64 интегрирована в операционные системы Windows. BMP c 48 и 64 bpp не бывает, из стандартных форматов такое поддерживают только PNG и DICOM.
Что касается 32 bpp, то изначально 4 байт добавлялся только для ускорения, ибо проц. с триадами работает крайне неэффективно. Такой формат назывался BGRX. Потом решили, что глупо держать пустой байт если можно туда запихнуть альфа-канал, получился формат BGRA. Поскольку эти два формата никак не различимы с т.з. метаданных, способ их обработки целиком и полностью определяется софтом - если хочет использовать альфу, рисует через AlphaBlend, не хочет - обычными функциями.
И отдельный вопрос - что именно там кодируется: прозрачность или плотность. Тут в GDI и GDI+ мнения расходятся .
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191348
Сергей N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский Борис, речь шла об общих принципах поддержки BMP, в том числе и Bits Per Pixel ( https://msdn.microsoft.com/en-us/library/windows/desktop/ee719797(v=vs.85).aspx ). Там есть и 48 и 64. Какая-то у Вас вольная трактовка истории развития формата BMP. Речь, наверное, идет о совместимости GDI и GDI+. Там действительно могут быть проблемы, например, с пропаданием альфа канала.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191398
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей N, 48bpp в BMP Native Codec все же нет. но про 64bpp - занятная инфа, если еще и работает как положено))
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191595
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей NСоколинский Борис, речь шла об общих принципах поддержки BMP, в том числе и Bits Per Pixel ( https://msdn.microsoft.com/en-us/library/windows/desktop/ee719797(v=vs.85).aspx ). Там есть и 48 и 64.

Там они может и есть, только в формате BMP их нет.
https://msdn.microsoft.com/en-us/library/windows/desktop/dd183391(v=vs.85).aspx
Изволите видеть, что и для 4 и для 5 версий на 32 bpp все заканчивается.

Также нет их и в описании структуры в памяти
https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376(v=vs.85).aspx
Видимо, если они и присутствуют, то в каком-то проприетарном формате, с которым непонятно как следует работать.

Сергей N Какая-то у Вас вольная трактовка истории развития формата BMP.
За давностью лет, возможно чего-то подзабыл, но вряд ли.
В оригинальном описании формата 32bpp четко указано: The high byte in each DWORD is not used.
Вместе с тем, из описания функции AlphaBlend следует, что в последнем байте все же можно задавать прозрачность
https://msdn.microsoft.com/en-us/library/windows/desktop/dd183393(v=vs.85).aspx

Вот такая вот загогулина, понимаешь (с)
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191665
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей N, не путайте файл с расширением BMP (о котором я писал) с понятием BITMAP в GDI. В памяти организация может быть различной, но это не значит, что это будет использоваться в файлах один-в-один. Найдите в своей системе 32-битный файлы BMP. Их там не и никогда не было. Потому как эти файлы использовались когда функции AlphaBlend ещё не было в системе. Поэтому и штатное средство, которое работает с BMP файлами ничего не знает о 32-битном BMP. Когда же появилась задача использовать альфа-канал, то начали использовать PNG. Поэтому ещё раз повторю 32-битный формат BMP - искусственный. То что его поддерживает пара программ, ситуацию не меняет.
PS: дле невнимательных, слово изобретение у меня было в кавычках. Наивно думать, что в фирме которая разрабатывает визуальные компоненты, не знают об устройстве картинок. И ссылочка, вами приведенная, извините, совсем о другом
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191672
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ещё есть самая лучшая библиотека растровой графики за всё существование Delphi - это Graphics32
http://graphics32.org/wiki/Main/ThirdParty

Офигенная, использую с 2001 года.

А с персонажем Goodok начинали вместе работать как раз в том же 2001 году над интерфейсов G32 Interface - нам надо было эротично, с антиалиасингом и прочими няшками нарисовать Кремлёвский концертный зал для parter.ru, на который мы вместе пахали за одним столом

Там есть и мой говнокод (отрисовка Безье) )
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191682
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorв том же 2001 году над интерфейсов G32 Interface - нам надо было эротично, с антиалиасингом и прочими няшками нарисоватьпочему GDI+ не использовали, которая как раз тогда же (?) и вышла с Windows XP? :-)
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191687
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисИзволите видеть, что и для 4 и для 5 версий на 32 bpp все заканчивается.если точнее - 32 битами заканчивается поддержка битмапов в GDI, к которой и относятся эти bitmap header'ы
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191693
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
fd00chdefecatorв том же 2001 году над интерфейсов G32 Interface - нам надо было эротично, с антиалиасингом и прочими няшками нарисоватьпочему GDI+ не использовали, которая как раз тогда же (?) и вышла с Windows XP? :-)

Ну, наверное, потому, что не знали про неё, зато хорошо знали про G32
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191705
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый большой плюс и одновременно минус GDI+ это софтварная реализация всего. С одной стороны отвязка от специфики графических карт, с другой тормоза по сравнению с pure-GDI
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191716
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger, как и у G32))
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191720
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
fd00chwhite_nigger, как и у G32))
Ну конечно !
Только G32 работает предсказуемо, и код доступен всем и каждому.
В отличие от
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191721
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И работает сильно быстрей чем этот самый GDI+.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191722
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorТолько G32 работает предсказуемо, и код доступен всем и каждому.
В отличие отА в чём непредсказуемость GDI+? В целом работает без проблем. Навскидку могу сказать, что нельзя в инициализации DLL использовать. Что автоматом должно учитываться для пакетов делфи BPL
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191728
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
white_niggerdefecatorТолько G32 работает предсказуемо, и код доступен всем и каждому.
В отличие отА в чём непредсказуемость GDI+? В целом работает без проблем.

в том, что в код нельзя посмотреть.
В очередной инкарнации что-то поменяется из разряда "а сейчас мы истинно работаем через аппаратное ускорение !",
а потом окажется, что список этого самого ускорения работает на ограниченном списке драйверов.

Насчёт кода - это кому как. Я предпочитаю с исходным кодом, мне так понятнее, как что работает
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191731
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerА в чём непредсказуемость GDI+? В целом работает без проблем.помог бы тогда asviridenkov нормально выводить текст с поддержкой ClearType))

интересно, получится ли хотя бы в теории на G32 его либу перевести? думаю, что озвученный "плюс"defecatorкод доступен всем и каждому.трансформируется в "допиши сам то, чего не хватает"
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191733
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatИ работает сильно быстрей чем этот самый GDI+.
Нашел с чем сравнивать.

Вот любопытно сделать замер на скорость отрисовки.
К примеру, GDI рисует картинку 2048x2048x24bpp в масштабе 2:1 ~30 мс.

Кто быстрее?
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191734
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chтрансформируется в "допиши сам то, чего не хватает"
Ну да, две разные парадигмы. Либо так, либо "[вози]ись как хочешь с тем что есть". ;)

Но тут есть нюанс: имхо в GR32 фишек больше чем в GDI+ "прямо из коробки".
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191736
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chпомог бы тогда asviridenkov нормально выводить текст с поддержкой ClearType))Он и сам вроде справляется. К тому же я не помню какие там были проблемы
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191737
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисК примеру, GDI рисует картинку 2048x2048x24bpp в масштабе 2:1 ~30 мс.GDI самый быстрый, без вариантов.

Разве что Direct2D кое в чем быстрей.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191741
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreatСоколинский БорисК примеру, GDI рисует картинку 2048x2048x24bpp в масштабе 2:1 ~30 мс.GDI самый быстрый, без вариантов.
варианты есть - в фичах
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191744
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerОн и сам вроде справляется. К тому же я не помню какие там были проблемыс тем, что я описал - не справляется. говорит, врожденное уродство и лечению не подлежит((
*на малых размерах шрифта, на крупных еще более-менее смотрибельно

rgreatимхо в GR32 фишек больше чем в GDI+ "прямо из коробки".отрисовка путей/полигонов/регионов/эллипсов/секторов/кривых, сложные кисти (градиентные, с bitmap-подложкой), пространственные преобразования там есть?
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191745
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatGDI самый быстрый, без вариантов.
Да вот нифига.
Я почему спрашиваю: у меня в/камера с таким разрешением дает 80 fps, и оригинальный софт успевает отрисовать почти все.
Т.е ~2.5 раза быстрее GDI. ХЗ на чем там сделано, но это факт.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191746
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerdefecatorТолько G32 работает предсказуемо, и код доступен всем и каждому.
В отличие отА в чём непредсказуемость GDI+? В целом работает без проблем. Навскидку могу сказать, что нельзя в инициализации DLL использовать
В DLL можно, если аккуратно.
Проблема в пересчете координат, последняя строка/столбец может пропускаться.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191748
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисХЗ на чем там сделаном.б. он на этапе декодирования хитрит, по аналогии с jpeg?)) или DirectX/OpenGL используется, т.е. другая весовая категория
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191749
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

Это уже не "быстрый" а "функциональный".

P.S. Делал как-то канвасик умеющий работать одним интерфейсом опционально через GDI, CGI+, GR32 и Direct2D.
Вот тестилка:
http://rghost.net/7LCqH2ywx
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191750
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
fd00chwhite_niggerОн и сам вроде справляется. К тому же я не помню какие там были проблемыс тем, что я описал - не справляется. говорит, врожденное уродство и лечению не подлежит((
*на малых размерах шрифта, на крупных еще более-менее смотрибельно

rgreatимхо в GR32 фишек больше чем в GDI+ "прямо из коробки".отрисовка путей/полигонов/регионов/эллипсов/секторов/кривых, сложные кисти (градиентные, с bitmap-подложкой), пространственные преобразования там есть?
есть
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191753
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chСоколинский БорисХЗ на чем там сделаном.б. он на этапе декодирования хитрит, по аналогии с jpeg?)) или DirectX/OpenGL используется, т.е. другая весовая категория
Там не jpeg, там баейровский (RAW) формат. Преобразование в RGB через IPP, раскидано по потокам ~5 мс.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191754
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatdefecator,
P.S. Делал как-то канвасик умеющий работать одним интерфейсом опционально через GDI, CGI+, GR32 и Direct2D.
Вот тестилка:
http://rghost.net/7LCqH2ywx

Исходник можешь выложить?
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191755
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rgreatdefecator,

Это уже не "быстрый" а "функциональный".

P.S. Делал как-то канвасик умеющий работать одним интерфейсом опционально через GDI, CGI+, GR32 и Direct2D.
Вот тестилка:
http://rghost.net/7LCqH2ywx
запустил. На первом месте GDI+, на втором GR32.
(у меня нет полноценного ускорителя, всё на встроенной графике Intel, которая тоже вроде как ускоритель)

Я не настаиваю на своей правоте типа "G32 навсегда".
G32 чисто софтверный, но он предсказуемый - никакой мелкософт
не скажет, что вот с этой версии GDI+ работает иначе.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191756
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Соколинский Борисrgreatdefecator,
P.S. Делал как-то канвасик умеющий работать одним интерфейсом опционально через GDI, CGI+, GR32 и Direct2D.
Вот тестилка:
http://rghost.net/7LCqH2ywx

Исходник можешь выложить?
плюсую к вопросу. Затестю на нынешней G32 ))
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191766
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисИсходник можешь выложить?
Блин, пришлось поискать и заставить работать.

http://rghost.net/8f2CBPBcy

Строго не судите. Это были "игры для ума" под свою задачу.
Для полноценного бенча разных систем все равно не годиться, ибо между рендерами и бенчем стоит далеко не оптимальная прослойка.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191803
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatДля полноценного бенча разных систем все равно не годиться, ибо между рендерами и бенчем стоит далеко не оптимальная прослойка.
Ну да.
Все не смотрел, но для растров время явно неправильно считается. Их нужно прямо на экран рендерить, иначе ускорители нифига не задействуются. Остального это тоже касается.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191804
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,
Забыл сказать спасибо
Может доточу как-нибудь, когда время будет.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39191820
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис, там есть переключатель "использовать буфер / малевать на экране"
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39192576
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борисrgreat,
Забыл сказать спасибо
Может доточу как-нибудь, когда время будет.
Выложи как допилишь. :)
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39192735
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисВсе не смотрел, но для растров время явно неправильно считается. Их нужно прямо на экран рендерить, иначе ускорители нифига не задействуются.Рендер на экран - это весьма частный случай использования графических библиотек.
Не комильфо.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39192762
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatРендер на экран - это весьма частный случай использования графических библиотек. Не комильфо. Очень даже комильфо если нужна скорость (а мы, собственно, о ней речь ведем).
Помимо ускорения алгоритма отрисовки, еще будет существенное ускорение когда нужно прорисовать только невалидный фрагмент.
Можно, конечно, его и в буфере учитывать, но сильно сомневаюсь, что кто-нибудь это делает.
...
Рейтинг: 0 / 0
Почему происходит искажение глифа при вставке в канву?
    #39192763
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Direct2D учитывает.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Почему происходит искажение глифа при вставке в канву?
    #40118601
SergSVK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подниму тему. Новую не хочется создавать.
Есть проект на XE8 - считывает иконки из базы в TImsgeList. Получаемая картинка с тулбаром и простой код ниже

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
var
  FIcon: TIcon;
  FStream: TStream;
...
  FStream:=TMemoryStream.Create;
  Try
    TBlobField(FieldByName('icon')).SaveToStream(FStream);
    FStream.Position:=0;
    FIcon:=TIcon.Create;
    Try
      FIcon.LoadFromStream(FStream);
      FImageList.Height:=32;
      FImageList.Width:=32;
      FImageList.ColorDepth:=cd32Bit;
      FImageList.AddIcon(FIcon);
    Finally
      FIcon.Free;
    end;
  Finally
    FStream.Free;
  end;
...



Все работает без артефактов с полной прозрачностью. Собрал проект на Rio - полезли артефакты связанные скорее всего с прозрачностью. Попробовал иконку копировать в TBitmap через код содранный из ImgEdit.pas

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var
  NewBitmap: TBitmap;
...
begin
  NewBitmap := TBitmap.Create;
  try
    NewBitmap.PixelFormat := pf32bit;
    NewBitmap.Height := FIcon.Height;
    NewBitmap.Width := FIcon.Width;
    NewBitmap.Canvas.Brush.Color := clWhite;
    NewBitmap.Canvas.FillRect(NewBitmap.Canvas.ClipRect);
    NewBitmap.Canvas.Draw(0, 0, FIcon);
    FImageList.AddMasked(NewBitmap, clWhite);
  finally
    NewBitmap.Free;
  end;
...



Но слабо заметные контурные артефакты белого цвета остались. Полной прозрачности как на XE8 нет...
Кто что посоветует ?
Приложенная картинка из Rio и с начальным кодом. Если код с NewBitmap - только легкая белая окантовка в некоторых местах иконок.
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Почему происходит искажение глифа при вставке в канву?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]