Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Интерполяция изображения   Найти похожие ветки 

 
AlexTregubov ©   (2004-03-05 09:55) [0]

Мастера! Может кто подскажет, как быстро увеличить размер изображения.
Заранее спасибо


 
Mantic0re   (2004-03-05 10:15) [1]

Используй билинейную интерполяцию..
Нормальные исходники на асме в VirtualDub.

Гугл тебе в помощь =)


 
AlexTregubov ©   (2004-03-05 14:45) [2]

Если можно, немного поподробней. Если можно, то с кодом.
Исходники я нашел, но в асме не силен. Где смотреть - в файле A_bitmap.asm _asm_resize_bilinear?


 
MBo ©   (2004-03-05 15:29) [3]

Возможно, устроит простое StretchBlt (на Nt-семействе  -со SetStretchbltMode HALFTONE)


 
AlexTregubov ©   (2004-03-05 15:54) [4]

Нет, последнее не подходит по качеству.
Алгоритм на Delphi написан, но не устраивает скорость.
Надо, чтобы было быстро


 
Opilki_Inside ©   (2004-03-07 16:58) [5]

2AlexTregubov:

увеличивать всегда на один и тот же размер?
тогда часть расчетов можно сделать заранее и загнать в массив


 
Mantic0re   (2004-03-09 11:17) [6]

Да, можно и из A_bitmap.asm, только когда откомпилишь тасмом (5.3 , чтоб ММХ понимал) полученный OBJ прилинкуешь и объявишь функции как stdcall (параметры сохраняются в стэке), и после каждого вызова мне приходилось делать:
asm
 add esp, $10
end;
потому что в исходнике параметры извлекаются из стека, а esp не восстанавливается..


 
AlexTregubov ©   (2004-03-10 09:01) [7]

ManticOre, а не могли бы вы еще объяснить назначение параметров этой процедуры  (_asm_resize_bilinear) ?


 
Mantic0re   (2004-03-10 10:12) [8]

А там же всё написано:
(+ объяснения параметров, как я их понимаю)

;asm_resize_bilinear(
; [esp+ 4] void *dst, - конечный буфер + смещение на ширину строки (например dword(DstPointer)+Width*4 для pf32bit)
; [esp+ 8] void *src, - исходный буфер картинки
; [esp+12] ulong w, - ширина
; [esp+16] ulong h, - высота
; [esp+20] ulong dstpitch, - шаг для конечного буфера (наверно, если у тебя pf24bit - то будет 1)
; [esp+24] ulong srcpitch, - шаг для исходного буфера
; [esp+28] ulong xaccum, - дополнительная точность для коэф. масштабирования по Х
; [esp+32] ulong yaccum, -//- У
; [esp+36] ulong xfrac, - дробная часть коэффициента масштабирования для Х
; [esp+40] ulong yfrac, - .. У
; [esp+44] long xint, - целая ..
; [esp+48] long yint, -..
; [esp+52] void *srcprecopy, - буфер "предкопии" можно задать 0
; [esp+56] ulong xprecopy, - //- похоже на смещение
; [esp+60] void *srcpostcopy, -//- "посткопии"
; [esp+64] ulong xpostcopy); -//-

А вообще посмотри как функция используется в исходниках. Я оттуда и выводы делал.
Все ОК, когда размеры начального и конечного буфера одинаковы.
У меня получилось только увеличение картинки, с уменьшением - пошли глюки - надо уточнить параметры..

Простой пример:

.......
var
 CoefX, CoefY : Int64;
.......
begin
.......
 coefx := round(1/(2*(int64(1) shl 32))); // увеличим картинку в 2 раза
 coefy := round(1/(2*(int64(1) shl 32))); //

 _asm_resize_bilinear(dword(DstBuf)+ScrX*4, dword(SrcBuf), -ScrX*4, ScrY, ScrX*4, ScrX*4, 0, 0, coefx and $ffffffff, coefy and $ffffffff, coefx shr 32, coefy shr 32, 0,0,0,0);
 asm add esp, $40 end;
 BitBlt(WindowDC, 0, 0, ImgW, ImgH, PictureDC, 0, 0, SRCCOPY);
..........


 
AlexTregubov ©   (2004-03-10 11:04) [9]

Спасибо большое!!!


 
NoName   (2004-05-12 11:10) [10]

В WinApi есть удобная функция StretchBlt
иногда она даже использует возможности видеокарты
Разобраться с ней не особо сложно, в хелпе WinSDK все хорошо
описанно.
Единственное немного нестандартный для визуального программирования подход через THandle на ресурс и на приемник.
Я думаю разберешся.



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.056 c
14-1088757616
Cosinus
2004-07-02 12:40
2004.07.25
Склероз - болезнь молодежи!


6-1085656369
Sunny Way
2004-05-27 15:12
2004.07.25
Ограничение количества клиентов у TServerSocket


1-1089762117
Алексей
2004-07-14 03:41
2004.07.25
Необходимо вычислять довольно сложные математические выражения.


3-1088715451
Alexei Sviridov
2004-07-02 00:57
2004.07.25
Клиент для IB


14-1089093136
WondeRu
2004-07-06 09:52
2004.07.25
Шутка старая, но вводит меня в тупик