Форум: "Media";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];
ВнизПомогите с выводом изображения Найти похожие ветки
← →
gray_falcon © (2007-05-28 16:21) [0]Как мне вывести изображение из файла, и при том не одно, на форму 1024*768 с наименьшей нагрузкой на процессор.
Вся моя беда в том, что мне нужно нарисовать фон (делаю через BitBlt), а затем наложить изображение, убрав белый цыет (это через TransparentBlt). Если вывожу сразу на форму, то изображение мерцает, если использую промежуточный HDC процессор конкретно загружается. А мне так на фон надо будет выводить несколько изображений. Помогите, кто чем может. Или мне пора справочники по DirectX находить?
← →
antonn © (2007-05-28 18:27) [1]создать TBitmap, рисовать на нем, его выводить через BitBlt
← →
DVM © (2007-05-29 11:27) [2]
> gray_falcon ©
показывай как выводишь
← →
gray_falcon © (2007-05-29 15:32) [3]
> DVM ©
> показывай как выводишь
вот так
var
Form1: TForm1;
img, fon, bmp: TBitmap;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
img:=TBitmap.Create;
fon:=TBitmap.Create;
bmp:=TBitmap.Create;
img.LoadFromFile(ExtractFilePath(Application.ExeName)+"img.bmp");
fon.LoadFromFile(ExtractFilePath(Application.ExeName)+"fon.bmp");
bmp.Width:=1024;
bmp.Height:=768;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
BitBlt(bmp.Canvas.Handle,0,0,fon.Width,fon.Height,fon.Canvas.Handle,0,0,SRCCopy) ;
TransparentBlt(bmp.Canvas.Handle,0,25,img.Width,img.Height,img.Canvas.Handle,0,0 ,img.Width,img.Height,clWhite);
BitBlt(Canvas.Handle,0,0,1024,768,bmp.Canvas.Handle,0,0,SRCCopy);
end;
ко всему прочему у меня это самое "img.bmp" 1027*750 и прозрачность его очень долго обрабатывается, поэтому при частоте 25 Гц проц на 40% грузится.
Ну размер я сменю если надо, а вот если если в Timer1Timer написать
procedure TForm1.Timer1Timer(Sender: TObject);
begin
BitBlt(Canvas.Handle,0,0,fon.Width,fon.Height,fon.Canvas.Handle,0,0,SRCCopy);
TransparentBlt(Canvas.Handle,0,25,img.Width,img.Height,img.Canvas.Handle,0,0,img .Width,img.Height,clWhite);
end;
то оп-ля, загрузка процессора: 0% ! Кто нибудь знает этому разумное объяснение и как это применить, что-бы не мерцало.
И еще кто знает, почему bitmap формата 1024*768 при загрузке выдает "stream read error"?
← →
homm © (2007-05-29 16:21) [4]> поэтому при частоте 25 Гц проц на 40% грузится.
Я плакал :))
← →
homm © (2007-05-29 16:22) [5]Ровно 10 тактов получаеться в секунду! :))
← →
Sapersky (2007-05-29 16:30) [6]Можно попробовать Bitmap.PixelFormat := pf32bit или Bitmap.PixelFormat := pfDevice (но всем битмапам один и тот же).
← →
DVM © (2007-05-29 17:44) [7]
> gray_falcon ©
А нахрена, скажи мне, выводить одну и ту же картинку 25 раз в секунду без изменений?
← →
gray_falcon © (2007-05-30 23:56) [8]
> А нахрена, скажи мне, выводить одну и ту же картинку 25
> раз в секунду без изменений?
Ну во-первых она там двигаться должна!!! Код не доделанный (движение сожрет еще ресурсов). А 25 Гц применяется часто в фильмах. Меньшая тянет на фиговенькую анимацию
А во-вторых, я вывожу прямо на Canvas формы, попробуй-ка открыть Диспетчер (Ctr-Alt-Del), или передать фокус другому окну, а потом вернуть своему. У меня лично остается незакрашеная область на форме.
← →
Vasiliy (2007-05-31 15:41) [9]Так что за задача?
Я например подобную вещь делаю под DirectShow с использованием VMR9, загрузка процессора 0%
← →
gray_falcon © (2007-05-31 20:30) [10]
> Sapersky (29.05.07 16:30) [6]
> Можно попробовать Bitmap.PixelFormat := pf32bit или Bitmap.
> PixelFormat := pfDevice (но всем битмапам один и тот же).
>
Огроменное спасибо!
Загрузка CPU 0%! Даже в голову не могло прийти изменить формат пикселей.
Обе картинки у меня 24 битные, поэтому достаточно
bmp.PixelFormat:=pf24bit;
и все в порядке. Но на всякий случай лучше у всех битмапов ставить одинаковый пиксельный формат после загрузки, если он заранее не известен.
Тут-то собака и зарыта. Когда выводил прямо на форму все было нормально, а когда использовал промежуточный битмап, то формат его пикселей был иной (или его вообще не было?!) и на подгонку форматов уходили эти 40%. Вот так-то. Может это кому-нибудь еще пригодится.
Еще раз огромнейшее спасибо!!! Дельный совет.
Ну я так считаю, что тема закрыта.
← →
homm © (2007-05-31 20:44) [11]> Ну я так считаю, что тема закрыта.
Просто предупредить: функция TransparentBlt работает только в виндовс 2000/ХР.
← →
Vovan #3 (2007-05-31 20:52) [12]>Просто предупредить: функция TransparentBlt работает только в виндовс 2000/ХР.
Иногда лучше жевать (c)
TransparentBlt
Windows NT/2000/XP/Vista: Included in Windows 2000 and later.
Windows 95/98/Me: Included in Windows 98 and later.
Кстати, проверено.
← →
homm © (2007-05-31 20:54) [13]> Иногда лучше жевать ©
Ага, тебе.
Дальше кто читать будет?Windows 95/98: TransparentBlt contains a memory leak that can exhaust system resources. To draw a transparent bitmap using BitBlt, see Knowledge Base article 79212.
← →
homm © (2007-05-31 21:00) [14]Ну и выше конечно торже работает(Виста), я думаю это очевидно :).
← →
имя (2007-12-25 02:20) [15]Удалено модератором
← →
MetalFan © (2007-12-26 19:46) [16]переделай на GDI+, там есть CachedBitmap, которые умеют быстро выводиться.
← →
имя (2008-01-10 18:23) [17]Удалено модератором
← →
имя (2008-01-11 10:33) [18]Удалено модератором
← →
имя (2008-01-11 10:33) [19]Удалено модератором
← →
Stexen (2008-01-15 20:14) [20]
> У меня лично остается незакрашеная область на форме.
А сабытия OnPaint для формы не помогут???Ну в обычном виде может и нет, но его переделать надо для своего класса формы и все будет в норме, чем по 25 раз выводить одно и тоже
> т-то собака и зарыта. Когда выводил прямо на форму все было
> нормально, а когда использовал промежуточный битмап, то
> формат его пикселей был иной (или его вообще не было?!)
> и на подгонку форматов уходили эти 40%. Вот так-то. Может
> это кому-нибудь еще пригодится.
По подробнее можно что это за подгонка???И как это формата пикселей небыло???блин что то я не догоняю ни про "подгонку" ни про форматы, это где про такие вещи написано???
> оп-ля, загрузка процессора: 0% ! Кто нибудь знает этому
> разумное объяснение и как это применить
Так то таймер в отдельном потоке выполняется
← →
имя (2008-01-16 19:02) [21]Удалено модератором
← →
имя (2008-05-12 14:45) [22]Удалено модератором
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.003 c