On Tuesday 29 July 2003 16:19, Mihnea GALCA wrote:
> On Tue, 2003-07-29 at 14:01, Serghei Amelian wrote:
> > Stie cineva unde pot gasi documentatie referitoare la scalarea
> > pixmap-urilor? Ma intereseaza algoritmii de interpolare a pixelilor,
> > chestii de astea. Sau poate sa ma ajute cineva sa creez un algoritm de
> > scalare mai rapid pentru QFaxReader? Smooth-scaling-ul din QT merge super
> > greu, pentru ca e generic, pentru imagini cu orice adancime de culoare.
> > Pe mine m-ar interesa un algoritm care sa foloseasca la intrare
> > imagini-fax (B/W, un singur bit/pixel) si sa scoata pixmap in trepte de
> > gri pe 8 biti. Sunt convins ar fi muult mai rapid, deoarece cantitatea de
> > date procesata ar fi mai mica. Oare daca sectiunile critice ar fi scrise
> > in assembler folosind toate facilitatile procesoarelor moderne (ma refer
> > la IA32, adica MMX, 3DNow!) nu ar fi si mai rapid?
>
> Ceea ce vrei tu se poate face prin filtrarea imaginilor folosind mai
> multe tipuri de filtre ca: Box, Bessel, Blackman, Cubic, Gaussian,
> Hanning, Hamming, Hermite, Sinc, Lanczos, Mitchell, Quadratic.
>
> Implementari la filtrele astea le gasesti in gimp, ImageMagick

Implementarile sunt supercomplicate, m-am uitat si eu prin sursele de la gimp. 
Eu as vrea sa inteleg teoria, ca sa pot sa implementez un algoritm care sa 
foloseasca la maxim faptul ca imaginea de intrare e monocroma si cea de 
iesire pe 8 biti.
.
>
> Din cate stiu eu nu exista o implementare directa adica resize+conversie
> de la 1bpp la 8bpp, dar e usor de modificat implementarile din gimp.

Hmm, sa vad cat de usor... Am gasit pe net niste chestii care explica cum e cu 
interpolarea, poate ii dau de cap.

> Pentru optimizare la MMX/3DNow!/SSE/SSE2, pornesti de la sursa assembler
> generata de compilatorul C pe care incepi sa o optimizezi folosind
> instructiuni si registrii speciali. S-ar putea ca gcc-ul sa faca direct
> optimizari pt MMX/3DNow!/SSE, dar daca faci in assembler rezultatele pot
> fi mai bune. O alta idee de marire a performantelor, este lucrul cu
> bucati de imagine de pana 256K (marimea cache a procesorului).

Eh, aici nu prea poti s-o nimeresti, ca nu stii ce marime are cache-ul. 
Eventual codul sa se uite in cpuinfo. Problema e ca programul trebuie sa fie 
portabil (macar pentru arhitecturi Intel) pe diverse unix-uri (cum ar fi de 
ex. freeBSD, care nu are cpuinfo).

> Regards,
> Mihnea

-- 
Serghei.

Raspunde prin e-mail lui