![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Bitmap
PHPDeveloper © (2006-11-29 05:49:00)Здравствуйте.
Вот такая программа, использую компонент из Vedi VCL, для анимированных гиф файлов. Так при считывании каждого кадра в отдельный битмап, последующие битмапы после первого, получаются плохого качества (с белыми пятнами, искареженными), хотя сам кадр гиф файла отображается нормально.
Вот код:
{0}
bmBrush.Assign(glSelected.Image.Frames[0].Bitmap);
bm0.canvas.Brush.Bitmap := bmBrush; битмап получается нормальным
.....
{-------}
{1}
bmBrush2.Assign(glSelected.Image.Frames[1].Bitmap);
bm1.canvas.Brush.Bitmap := bmBrush2; - битмап получается плохого качества с белыми пятнами и т.д., хотя на кадре нет, С 3ем точно также
...........
{-------}
{2}
bmBrush3.Assign(glSelected.Image.Frames[2].Bitmap);
bm2.canvas.Brush.Bitmap := bmBrush3;
PZ (2006-12-19 12:34:00) [1]Может быть Вам использовать GDI+. Там никаких проблем с выделением кадров из GIF-файла нет.
PHPDeveloper (2006-12-19 12:24:00) [2]
> 2. Вывести второй кадр поверх первого, указав, что белый
> (цвет пятен) - прозрачный.
Каким образом узнать какого цвета пятна? Пятна получаются разного цвета,от изображения зависит :\
Eraser (2006-12-19 10:21:00) [3]> [6] PHPDeveloper (19.12.06 02:47)
а вариант [4] не подходит?
PHPDeveloper (2006-12-19 02:47:00) [4]Так, вопрос так толком и не решил.
В некоторых случаях появляются пятна не белого, а других цветов.
Может отдельно сохранить каждый кадр изображения и "тоскать" вместе с программой?
PHPDeveloper (2006-11-30 03:53:00) [5]Спасибо
Наиль (2006-11-29 17:24:00) [6]> дает доступ к "физическим" кадрам GIF'a, а там ради экономии
> прорисовываются только изменения относительно предыдущего
> кадра, или что-то вроде того.
Если во втором кадре действительно только изменения, то решение напрашивается само сабой:
1. Вывести первый кадр на промежуточный BitMap
2. Вывести второй кадр поверх первого, указав, что белый (цвет пятен) - прозрачный.
3. Использовать получившийся во временом BitMap результат.
Каждый следующий кадр должен накладываться поверх всех предыдущих с учётом прозрачных пятен.
Eraser (2006-11-29 17:13:00) [7]> [0] PHPDeveloper (29.11.06 05:49)
скорее всего проблема в том, что подобный код
glSelected.Image.Frames[0].Bitmap
дает доступ к "физическим" кадрам GIF'a, а там ради экономии прорисовываются только изменения относительно предыдущего кадра, или что-то вроде того.
как решить проблему - не знаю.
Дмитрий Белькевич (2006-11-29 17:10:00) [8]Может с pixelformat проблемы?
PHPDeveloper (2006-11-29 05:59:00) [9]*Jedi