![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ускоренная реализация
CodeMaster © (2008-12-08 19:28:00)Здраствуйте Мастера. Вот недавно задался вопросом как ускорить реализацию кода. Например вывести Bitmap на Канву. Знаю что это функции GDI+. Никак не могу разобраться с типом HBitmap. Подскажите как из файла загрузить в HBitmap
CodeMaster (2008-12-09 17:18:00) [1]=)
Германн (2008-12-09 16:51:00) [2]
> Спасибо всем кто помогал в рождении плеера.
>
Не вздумай теперь алименты требовать!
:)
CodeMaster (2008-12-09 16:43:00) [3]
> Anatoly Podgoretsky © (09.12.08 16:34) [20]
Спасибо я так и сделал, всё получилось. теперь моя программа шустрая и красивая.
Спасибо всем кто помогал в рождении плеера.
Anatoly Podgoretsky (2008-12-09 16:34:00) [4]> CodeMaster (09.12.2008 16:15:18) [18]
Не бери с таких источников код, обычно он кривой по самое не могу, этот тоже очень кривой.
Правильно решение - переписать все нахрен.
CodeMaster (2008-12-09 16:18:00) [5]Сразу хочу сообщить оригинальный код тоже не работает
CodeMaster (2008-12-09 16:15:00) [6]Вот немного отредактировал код взятый с delphiworld но почемуто он отказывается работать. Поищите ошибку пожалуйста
//FrameWidth,FrameHeight: Integer - Величина кнопки
> procedure TPOGiButton.Morphing(Bm1,Bm2: TBitmap; SCanvas:
> HDC);
> const
> count = 100;
> var
> i: integer;
> x, y: integer;
> bm: TBitMap;
> p1, p2, p: PByteArray;
> c: integer;
> k: integer;
> begin
> bm := TBitMap.Create;
>
>
>
> bm.PixelFormat := pf24bit;
> bm1.PixelFormat := pf24bit;
> bm2.PixelFormat := pf24bit;
> Bm.Width:= bm1.Width;
> Bm.Height:= Bm1.Height;
>
>
> BitBlt(SCanvas,0,0,FrameWidth,FrameHeight,Bm1.Canvas.Handle,
> 0,0,SRCCOPY);
> for i := 1 to count - 1 do
> begin
> for y := 0 to bm.Height - 1 do
> begin
> p := bm.ScanLine[y];
> p1 := bm1.ScanLine[y];
> p2 := bm2.ScanLine[y];
> for x := 0 to bm.Width * 3 - 1 do
> p^[x] := round((p1^[x] * (count - i) + p2^[x] *
> i) / count);
> end;
>
> BitBlt(SCanvas,0,0,FrameWidth,FrameHeight,Bm.Canvas.
> Handle,0,0,SRCCOPY);
>
>
> Application.ProcessMessages;
> if Application.Terminated then
> break;
> end;
>
>
>
> bm.Destroy;
> end;
Anatoly Podgoretsky (2008-12-09 14:39:00) [7]> CodeMaster (09.12.2008 13:17:11) [11]
Может TCanvas?
CodeMaster (2008-12-09 14:13:00) [8]Справился с этой задачей. Спасибо всем.
Но тут появилась ещё одна нигде не могу найти алгоритм эффекта морфинга, искал на DelphiWorld.ru там есть похожий пример но он очень медленный и вся работа идёт с TBrush. Пытался сам реализовать и конечно ничего из этого не вышло, может дадите направление где искать?
CodeMaster (2008-12-09 14:10:00) [9]На чистом API я ещё не готов
KilkennyCat (2008-12-09 14:04:00) [10]
> Все компоненты делаю под себя.
великий могучий русский язык... Под себя ходить можно.
Но это так.... мимоходом...
Может, проще тогда на чистом апи?
KilkennyCat (2008-12-09 14:01:00) [11]Вспоминается один известный пример работы с директиксом, где для "удобства" привязана канва к поверхности.
clickmaker (2008-12-09 13:44:00) [12]> [11] CodeMaster © (09.12.08 13:17)
а Canvas - это ни разу не часть VCL?
Как это сочетается с "Все компоненты делаю под себя"?
CodeMaster (2008-12-09 13:17:00) [13]
> Тогда что есть "Канва"?
Canvas
Германн (2008-12-09 12:42:00) [14]
> Я не использую стандартные VCL компоненты.
Тогда что есть "Канва"?
CodeMaster (2008-12-09 12:33:00) [15]Делаю я проигрыватель и хотелось бы чтобы он работал шустренько. Я не использую стандартные VCL компоненты. Все компоненты делаю под себя.
Германн (2008-12-09 12:25:00) [16]
> oxffff © (09.12.08 11:43) [7]
>
>
> > Подскажите как из файла загрузить в HBitmap
>
>
> LoadBitmap
>
Из файла?
И вообще. Пока автор не расскажет о своей задаче, все ответы на вопрос как "вывести Bitmap на Канву" следует ограничить ответом [3]. Ибо в VCL-ном приложении быстрее никак не получится.
oxffff (2008-12-09 11:43:00) [17]
> Подскажите как из файла загрузить в HBitmap
LoadBitmap
clickmaker (2008-12-09 11:34:00) [18]> Тип TBitmap слишком долго реализуется мне нужен HBitmap
TBitmap.Handle
Германн (2008-12-09 11:12:00) [19]
> Никак не могу разобраться с типом HBitmap.
А что тут разбираться. Вот что написано в Windows.pas
HBITMAP = type LongWord;
{$EXTERNALSYM HBITMAP}
codemaster (2008-12-09 10:33:00) [20]antonn: Нет такой способ не подходит. Тип TBitmap слишком долго реализуется мне нужен HBitmap