Форум: "Media";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
ВнизTFastDIB Найти похожие ветки
← →
Pent (2006-07-30 21:32) [0]FastDIB - это набор модулей Delphi для работы с растровой графикой под Windows. Библиотека представляет класс TFastDIB (альтернатива TBitmap) и обширный набор процедур для работы с ним: загрузка из файлов и памяти, отрисовка на экране, сохранение, изменение размеров (ресэмплинг) и глубины цвета, графические эффекты, рисование графических примитивов. Все функции тщательно оптимизированы, что позволяет добиться высочайшего быстродействия. При этом библиотека является чисто программной (расчеты производятся центральным процессором, без использования ресурсов видеоускорителя).
C 2001 года проект был неактивен. Сейчас проект возрожден. Отныне он располагается на http://sourceforge.net/projects/tfastdib.
Если у вас есть пожелания, предложения и прочие комментарии, пишите мне: cmr.Pent(a)gmail.com.
← →
Pent (2006-07-30 21:34) [1]Парамонов А.В. aka cmr.Pent
← →
DLag (2006-07-31 01:12) [2]Только вот нового ничего.
DIBUltra написана почти полностью на Асм-е, что даёт отличное быстродействие.
http://perso.magic.fr/sleon/
← →
Sapersky (2006-07-31 04:18) [3]Ну и где признаки возрождения?
Даже существующие примеры от Gordy не выложены.
← →
Pent (2006-07-31 08:33) [4]
> Ну и где признаки возрождения?
> Даже существующие примеры от Gordy не выложены.
Все будет! Хотелось бы услышать, актуально ли создание документации и дальнейшее развитие модулей.
← →
miek © (2006-07-31 09:05) [5]В теории актуально, на практике уже никому не нужно. Все юзают глсцене или просто на канве рисуют:(
← →
Pavia © (2006-07-31 16:59) [6]По-моему более актуальным будет реализация этого дела на шейдерах.
← →
antonn © (2006-07-31 18:12) [7]miek © (31.07.06 9:05) [5]
или просто на канве рисуют:(
ну же, улыбнитесь, это ведь так прекрасно:)
← →
Sapersky (2006-08-01 00:22) [8]актуально ли создание документации и дальнейшее развитие модулей.
Документация - не знаю, мне лично не нужна, хотя новички иногда жалуются что не хватает. Но тогда уж лучше не документация, а контекстная справка, вызываемая по F1.
Развитие - смотря в каком направлении. ИМХО, "не надо чинить то, что не сломалось", то есть кардинально переделывать существующие модули.
Добавлять новую функциональность - да. Например, мне бы пригодился оптимизированный под MMX Bilinear (сам пробовал, но получилось ещё медленнее чем в оригинале) и другие, более качественные методы resample (Spline, Lancros).
С другой стороны, когда выйдет Vista, которая всю графику рисует аппаратно, эти сверхоптимизированные функции окажутся не у дел - ну не догнать на процессоре ускоритель, хоть тресни. Можно, конечно, утешаться тем, что всех пользователей на новую ОС Мелкософт перетянет ещё нескоро...
У вас-то есть какие-то идеи по развитию?
или просто на канве рисуют:(
ну же, улыбнитесь, это ведь так прекрасно:)
Вообще-то и канвас, и TFastDIB ("чистый", без доп. модулей) - суть обёртки над GDI, только в первом случае вы получаете в довесок VCL. Так что мы улыбаемся :)
← →
miek © (2006-08-01 08:52) [9]>ну не догнать на процессоре ускоритель, хоть тресни
В играх не догнать. В простых задачах - все наоборот.
← →
Pent (2006-08-01 09:09) [10]Sapersky, спасибо за развернутый ответ.
> "не надо чинить то, что не сломалось"
Согласен полностью.
> контекстная справка, вызываемая по F1
Не подскажите удобную бесплатную программу для решения этой задачи? Никогда раньше не занимался этим, но готов освоить.
> другие, более качественные методы resample (Spline, Lancros)
Будет в ближайшем релизе. Преимущество в скорости над SmoothResize из GraphicEx - в полтора раза :-p
← →
Sapersky (2006-08-03 04:53) [11]>ну не догнать на процессоре ускоритель, хоть тресни
В играх не догнать. В простых задачах - все наоборот.
Ну вот простая задача - тот же ресэмплинг с фильтрацией. Билинейную фильтрацию через DDraw"шный Blt может делать почти любой ускоритель - в десятки раз быстрее программных методов.
Сейчас это мало кто использует, из-за сопутствующих проблем (битмап нужно перегонять в видеопамять, что может быть медленно) и ограничений (вывод только на экран) - но в Висте их грозятся устранить. А вписанная в требования ОС шейдерная видеокарта позволит реализовать более продвинутые методы фильтрации.
> контекстная справка, вызываемая по F1
Не подскажете удобную бесплатную программу для решения этой задачи?
Не знаю, тоже никогда не занимался.
Может быть, будет достаточно и комментариев в заголовках особо заковыристых функций.
> другие, более качественные методы resample (Spline, Lancros)
Будет в ближайшем релизе.
Что ещё планируется в ближайшем релизе?
У меня есть кое-какие наработки - генерация текстур, морфологические фильтры, более продвинутый FastFiles. Если соберусь привести их в порядок - поделюсь.
← →
miek © (2006-08-03 08:07) [12]>Ну вот простая задача - тот же ресэмплинг с фильтрацией
Я имел в виду более простые: "создать спрайт в памяти, нарисовать на нем hellp world, вывести на форму поверх кнопки".
← →
Pent (2006-08-03 08:32) [13]
> У меня есть кое-какие наработки - генерация текстур, морфологические
> фильтры, более продвинутый FastFiles. Если соберусь привести
> их в порядок - поделюсь.
>
Буду рад посмотреть.. cmr.Pent(a)gmail.com.. А так из первоочередных задач - красивый и быстрый (без копирования памяти) метод преобразования из TBitmap и обратно.
← →
Pent (2006-08-03 10:27) [14]FastLIB v3.9 - добавлена процедура "качественного" ресэмплинга - SmoothResize (пока только для 24 бит).
http://sourceforge.net/projects/tfastdib
← →
Sapersky (2006-08-03 13:06) [15]>Ну вот простая задача - тот же ресэмплинг с фильтрацией
Я имел в виду более простые: "создать спрайт в памяти, нарисовать на нем hellp world, вывести на форму поверх кнопки".
ИМХО, в ТАКИХ задачах о производительности вообще смешно говорить...
Кстати. Вы (хотя, вроде, мы на "ты"? не помню уже :)) будешь не против, если в FastLIB будут включены конвертированные функции попиксельного альфа-блендинга и гаммы из SpriteUtils (с указанием копирайтов)?
А так из первоочередных задач - красивый и быстрый (без копирования памяти) метод преобразования из TBitmap и обратно.
А вы, батенька, про SetInterface и не в курсе?
function Bitmap2FDIB(Src : TBitmap): TFastDIB;
Var n, c : Integer;
b : Byte;
Const
BitCounts: array [pf1Bit..pf32Bit] of Byte = (1,4,8,15,16,24,32);
begin
Result := nil;
If (Src.Width = 0) or (Src.Height = 0) then Exit;
If not (Src.PixelFormat in [pf1Bit..pf32Bit]) then
Src.PixelFormat := pf24bit;
Result := TFastDIB.Create;
Result.SetInterface(Src.ScanLine[Src.Height - 1], Src.Width, Src.Height,
BitCounts[Src.PixelFormat], 0, 0, 0);
If Result.Bpp <= 8 then begin
c := GetPaletteEntries(Src.Palette, 0, 256, Result.Colors[0]);
For n:=0 to c-1 do With Result do begin
b := Colors[n].r; Colors[n].r := Colors[n].b; Colors[n].b := b;
end;
Result.UpdateColors;
end;
end;
Никакие GDI-операции к получившемуся FastDIB применять нельзя; можно только те, которые работают непосредственно с памятью. Нельзя изменять (а тем более уничтожать) TBitmap, пока идёт работа с FastDIB.
Можно копировать Handle (HBITMAP) - тогда наоборот, использовать только GDI.
Перевод из FastDIB в TBitmap - только копированием Handle, см. демку BumpMap.
Только просьба вынести подобные функции в отдельный модуль, дабы соблюсти невинность FastDIB"овского Uses.
Ещё пожелание: функция качественного преобразования глубины цвета в 8 бит (существующие функции To8_XX генерировать палитру толком не умеют). Если я правильно понял, FastQuant.pas из папки AlphaImg - это оно и есть, нужно только конвертировать под последнюю версию FastDIB.
← →
Sapersky (2006-08-03 13:54) [16]Вах, дарагой! Кто вас научил проверять свойство Size?
А если я использую SetSubset? Size = 0, но FDIB вполне себе "живой". Проверяйте Width/Height.
При обращении к полям записи-указателя ставить "^" не обязательно.
"Красоту" в FastDIB.pas наводить не стоит, у всех о ней свои понятия, и если каждый разработчик будет переделывать под свои вкусы...
А так из первоочередных задач - красивый и быстрый (без копирования памяти) метод преобразования из TBitmap и обратно.
Э, кстати. А зачем вообще использовать TBitmap?
Я о нём уже почти забыл, как о страшном сне :)
← →
Pent (2006-08-03 15:00) [17]
> Вах, дарагой! Кто вас научил проверять свойство Size?
> А если я использую SetSubset? Size = 0, но FDIB вполне себе
> "живой". Проверяйте Width/Height.
Век живи - век учись, однако.
> Э, кстати. А зачем вообще использовать TBitmap?
Многие библиотеки ориентированы на TBitmap. Например, GraphicEx. Полностью ее переводить на FastDIB как-то не хочется. К тому же, что важнее, TBitmap есть стандарт, и новые библиотеки скорее всего будут также рассчитаны на него. Ну и хочется уметь кидать FastDIB на TImage.
Короче, хочется использовать наработанный код для TBitmap и FastDIB в одном приложении.
← →
Jeer © (2006-08-04 10:56) [18]
> Перевод из FastDIB в TBitmap - только копированием Handle,
> см. демку BumpMap.
Что сразу порождает, например, проблему "паразитного" преобразования, занимающего по времени до 10 ms при размерах 1024x768.
Если же хочется получить FPS = 50, то на все про все остается тоже 10 ms.
← →
Sapersky (2006-08-05 10:54) [19]Не знаю, у меня, видимо, ничего не преобразовывается - получается 0.04 мс.
function FDIB2Bitmap(Src : TFastDIB): TBitmap;
begin
Result := TBitmap.Create;
Src.FreeHandle := False;
Result.Handle := Src.Handle;
end;
Даже последующие обращения к TBitmap.Scanline оказываются вполне допустимы, т.к. TBitmap.SetHandle получает через GetObject адрес битмапа в памяти.
Но вообще TBitmap - весьма труднопредсказуемая зараза. Если у вас что-то делается в реальном времени, лучше его выкинуть сразу.
TImage - тем более.
← →
miek © (2006-08-07 15:18) [20]>Кстати. Вы (хотя, вроде, мы на "ты"? не помню уже :)) будешь не против, если в FastLIB будут включены конвертированные функции попиксельного альфа-блендинга и гаммы из SpriteUtils (с указанием копирайтов)?
Совершенно не против. Только они у меня под P-III оптимизированы, на P-IV+ нужно бы другие брать (или мои MMX-варанты).
А кстати - зачем их конвертировать, если поддержка FastDIB у меня уже есть? Создаешь псевдо-спрайт поверх своего TFastDIB(так, кажется, он назывался) и делаешь с ним все, что угодно.
← →
Pent (2006-08-15 00:09) [21]Вышел FastDIB v3.9.1: добавлена поддержка конвертации из TBitmap/TGraphic и обратно (http://sourceforge.net/projects/tfastdib).
← →
Pavia © (2006-08-15 03:39) [22]Тут посмотрел библеотеку есть желание помочь. Есть предложение добавить рисование элипса и окружности.
А вобще есть предложение переделать движок так, что бы при запуски(или первом обращении) программы он сам гинерировал различные процедуры.
Может стоит добавить возможность рисование фигур не только MOV
но и XOR, OR, AND, NOT, ADD, ADDM (добавление с насыщением).
← →
Sapersky (2006-08-15 04:20) [23]Вышел FastDIB v3.9.1
Что за махинации с Assign? Уничтожение битмапа, с которого всё копируется - трюк, может быть, довольно сомнительный, но оно работало, например, в FConvert.ConvertTo. А сейчас как будет работать?
Я же говорил - не надо чинить что не сломалось.
← →
Pent (2006-08-15 10:14) [24]Oops, видимо не тот файл залил, сорри.
← →
Pent (2006-08-15 11:18) [25]Перезалил файл.. Все-таки решил не очищать источник в Assign, а исправить FConvert.ConvertTo/ConvertToEx - так пожалуй будет более правильно.
> Есть предложение добавить рисование эллипса и окружности.
В смысле вручную? Через GDI можно и сейчас. А так, если готов написать грамотные процедуры рисования сглаженной линии/окружности, я буду очень рад!
> А вобще есть предложение переделать движок так, что бы при
> запуски(или первом обращении) программы он сам гинерировал
> различные процедуры.
Не понял, объясни.
> Может стоит добавить возможность рисование фигур не только
> MOV, но и XOR, OR, AND, NOT, ADD, ADDM (добавление с насыщением).
Опять же, если поможешь, будет очень классно.
Но скажу сразу: если тебе в одной-единственной программе нужно реализовать такую функциональность, возможно более привлекательным и оправданным вариантом будет использование не FastDIB, а, например g32. Все-таки время не стоит на месте, и с 2001 года появились другие, по многим параметрам превосходящие FastDIB графические библиотеки.
Однако если есть именно желание разобраться с основами 2D-графики, то FastDIB - это самое оно.
← →
Sapersky (2006-08-16 15:46) [26]Все-таки решил не очищать источник в Assign, а исправить FConvert.ConvertTo/ConvertToEx - так пожалуй будет более правильно.
Во-первых, это большие проблемы для тех, кто использует Assign в своих программах, но не читает Notes на sourceforge. Даже если писать все изменения в заголовках модулей, как это делают, например, в GLScene - не ожидающий подлянки человек может и не обратить внимание.
Во-вторых, неудобно. Теперь перед уничтожением битмапа - источника Assign нужно проделать кучу телодвижений, которые раньше делались автоматически.
В-третьих, к тому же и "неправильно". Изменение полей объекта извне (и необходимость этого изменения) - ИМХО, куда больший грех, чем отличие в функциональности от VCL. Причём и отличие фактически никуда не делось, а только приняло гораздо более неприятную форму (необходимость помнить о телодвижениях и воспроизводить их).
← →
Pent (2006-08-16 22:54) [27]Хм.. С первым пунктом частично согласен, но на сайте доступна и старая версия, так что выбор за программистом. Я все-таки уверен, что Assign должен работать как TBitmap.Assign - то есть создавать ссылку, при этом сохраняя "живым" и источник. Конфликт между совместимостью и прогрессом неизбежен.
Пункты 2-3. Сейчас все работает следующим образом: при вызове Dst.Free очищается и источник, и ссылка (логично). Вот при Src.Free действительно происходит ерунда. Может, добавить функцию Release, при этом убрав из AssignBmp.FreeDC:=False;
?
Bmp.FreeBits:=False;
Bmp.FreeHandle:=False;
Случай, когда надо именно перебросить все поля в другой объект, является весьма специальным. Я бы в обычной ситуации просто копировал указатель:Dst.Free;
Dst:=Src;
Я думаю, надо еще посоветоваться с "боссом" (gordy). В любом случае, спасибо за комментарий. Приятно обсудить что-либо с понимающим человеком.
← →
Sapersky (2006-08-17 03:37) [28]Я все-таки уверен, что Assign должен работать как TBitmap.Assign - то есть создавать ссылку, при этом сохраняя "живым" и источник. Конфликт между совместимостью и прогрессом неизбежен.
Не вижу в данном случае никакого прогресса. Зачем делать из TFastDIB точную копию TBitmap?
Вот есть библиотека KOL, предоставляющая ту же функциональность, что и VCL, но при этом имеющая значительные отличия от VCL. И ничего, люди пользуются, многим даже нравится :)
← →
miek © (2006-08-18 08:32) [29]>Может стоит добавить возможность рисование фигур не только MOV
но и XOR, OR, AND, NOT, ADD, ADDM (добавление с насыщением).
Стремление людей переизобретать колесо, велосипед и зубную щетку неистребимо.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.041 c