Текущий архив: 2009.01.25;
Скачать: CL | DM;
Вниз
Ускоренная реализация Найти похожие ветки
← →
CodeMaster © (2008-12-08 19:28) [0]Здраствуйте Мастера. Вот недавно задался вопросом как ускорить реализацию кода. Например вывести Bitmap на Канву. Знаю что это функции GDI+. Никак не могу разобраться с типом HBitmap. Подскажите как из файла загрузить в HBitmap
← →
Сергей М. © (2008-12-08 19:53) [1]
> ускорить реализацию кода
Реализуют алгоритм, а не код.
← →
{RASkov} © (2008-12-08 20:23) [2]> [0] CodeMaster © (08.12.08 19:28)
> Подскажите как из файла загрузить в HBitmap
http://yandex.ru/yandsearch?text=%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0+%D0%B8%D0%B7+%D1%84%D0%B0%D0%B9%D0%BB%D0%B0+HBitmap&clid=14585&stpar2=%2Fh0%2Ftm50%2Fs2&stpar4=%2Fs2
← →
antonn © (2008-12-08 20:36) [3]
> Например вывести Bitmap на Канву. Знаю что это функции GDI+.
просто вывести TBitmap можно быстро и функциями GDI (например BitBlt())
← →
codemaster © (2008-12-09 10:33) [4]antonn: Нет такой способ не подходит. Тип TBitmap слишком долго реализуется мне нужен HBitmap
← →
Германн © (2008-12-09 11:12) [5]
> Никак не могу разобраться с типом HBitmap.
А что тут разбираться. Вот что написано в Windows.pasHBITMAP = type LongWord;
{$EXTERNALSYM HBITMAP}
← →
clickmaker © (2008-12-09 11:34) [6]> Тип TBitmap слишком долго реализуется мне нужен HBitmap
TBitmap.Handle
← →
oxffff © (2008-12-09 11:43) [7]
> Подскажите как из файла загрузить в HBitmap
LoadBitmap
← →
Германн © (2008-12-09 12:25) [8]
> oxffff © (09.12.08 11:43) [7]
>
>
> > Подскажите как из файла загрузить в HBitmap
>
>
> LoadBitmap
>
Из файла?
И вообще. Пока автор не расскажет о своей задаче, все ответы на вопрос как "вывести Bitmap на Канву" следует ограничить ответом [3]. Ибо в VCL-ном приложении быстрее никак не получится.
← →
CodeMaster © (2008-12-09 12:33) [9]Делаю я проигрыватель и хотелось бы чтобы он работал шустренько. Я не использую стандартные VCL компоненты. Все компоненты делаю под себя.
← →
Германн © (2008-12-09 12:42) [10]
> Я не использую стандартные VCL компоненты.
Тогда что есть "Канва"?
← →
CodeMaster © (2008-12-09 13:17) [11]
> Тогда что есть "Канва"?
Canvas
← →
clickmaker © (2008-12-09 13:44) [12]> [11] CodeMaster © (09.12.08 13:17)
а Canvas - это ни разу не часть VCL?
Как это сочетается с "Все компоненты делаю под себя"?
← →
KilkennyCat © (2008-12-09 14:01) [13]Вспоминается один известный пример работы с директиксом, где для "удобства" привязана канва к поверхности.
← →
KilkennyCat © (2008-12-09 14:04) [14]
> Все компоненты делаю под себя.
великий могучий русский язык... Под себя ходить можно.
Но это так.... мимоходом...
Может, проще тогда на чистом апи?
← →
CodeMaster © (2008-12-09 14:10) [15]На чистом API я ещё не готов
← →
CodeMaster © (2008-12-09 14:13) [16]Справился с этой задачей. Спасибо всем.
Но тут появилась ещё одна нигде не могу найти алгоритм эффекта морфинга, искал на DelphiWorld.ru там есть похожий пример но он очень медленный и вся работа идёт с TBrush. Пытался сам реализовать и конечно ничего из этого не вышло, может дадите направление где искать?
← →
Anatoly Podgoretsky © (2008-12-09 14:39) [17]> CodeMaster (09.12.2008 13:17:11) [11]
Может TCanvas?
← →
CodeMaster © (2008-12-09 16:15) [18]Вот немного отредактировал код взятый с 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;
← →
CodeMaster © (2008-12-09 16:18) [19]Сразу хочу сообщить оригинальный код тоже не работает
← →
Anatoly Podgoretsky © (2008-12-09 16:34) [20]> CodeMaster (09.12.2008 16:15:18) [18]
Не бери с таких источников код, обычно он кривой по самое не могу, этот тоже очень кривой.
Правильно решение - переписать все нахрен.
← →
CodeMaster © (2008-12-09 16:43) [21]
> Anatoly Podgoretsky © (09.12.08 16:34) [20]
Спасибо я так и сделал, всё получилось. теперь моя программа шустрая и красивая.
Спасибо всем кто помогал в рождении плеера.
← →
Германн © (2008-12-09 16:51) [22]
> Спасибо всем кто помогал в рождении плеера.
>
Не вздумай теперь алименты требовать!
:)
← →
CodeMaster © (2008-12-09 17:18) [23]=)
Страницы: 1 вся ветка
Текущий архив: 2009.01.25;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.006 c