* Added stretchdraw

git-svn-id: trunk@5436 -
This commit is contained in:
michael 2006-11-21 14:57:20 +00:00
parent ab919747a6
commit ae11fd3770
7 changed files with 845 additions and 45 deletions

2
.gitattributes vendored
View File

@ -818,6 +818,7 @@ fcl/image/bmpcomn.pp svneol=native#text/plain
fcl/image/clipping.pp svneol=native#text/plain
fcl/image/drawing.pp svneol=native#text/plain
fcl/image/ellipses.pp svneol=native#text/plain
fcl/image/extinterpolation.pp svneol=native#text/plain
fcl/image/fpbrush.inc svneol=native#text/plain
fcl/image/fpcanvas.inc svneol=native#text/plain
fcl/image/fpcanvas.pp svneol=native#text/plain
@ -833,6 +834,7 @@ fcl/image/fpimage.inc svneol=native#text/plain
fcl/image/fpimage.pp svneol=native#text/plain
fcl/image/fpimgcanv.pp svneol=native#text/plain
fcl/image/fpimgcmn.pp svneol=native#text/plain
fcl/image/fpinterpolation.inc svneol=native#text/plain
fcl/image/fpmake.inc svneol=native#text/plain
fcl/image/fpmake.pp svneol=native#text/plain
fcl/image/fppalette.inc svneol=native#text/plain

View File

@ -1,5 +1,5 @@
#
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/09/19]
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/10/13]
#
default: all
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-palmos arm-wince arm-gba powerpc64-linux
@ -233,127 +233,127 @@ PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/ext
override PACKAGE_NAME=fcl
PACKAGEDIR_MAIN:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl/Makefile.fpc,$(PACKAGESDIR))))))
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),i386-go32v2)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-win32)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),i386-os2)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-freebsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),i386-beos)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-netbsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-solaris)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-qnx)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-netware)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-openbsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-wdosx)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-darwin)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),i386-emx)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-watcom)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),i386-wince)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),m68k-linux)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),m68k-amiga)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),m68k-atari)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),m68k-palmos)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),powerpc-linux)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),powerpc-macos)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),sparc-linux)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),sparc-solaris)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),x86_64-linux)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),x86_64-win64)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),arm-linux)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),arm-palmos)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),arm-wince)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),arm-gba)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer freetypeh freetype ftfont
override TARGET_UNITS+=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer extinterpolation freetypeh freetype ftfont
endif
ifeq ($(FULL_TARGET),i386-linux)
override TARGET_RSTS+=pscanvas

View File

@ -12,7 +12,8 @@ packages=paszlib pasjpeg hash
units=fpimgcmn fpimage pngcomn fpreadpng fpwritepng fpreadxpm fpwritexpm \
clipping fpcanvas pixtools fppixlcanv fpimgcanv pscanvas fpwritebmp \
fpreadbmp bmpcomn fpreadpnm fpwritepnm fpreadjpeg fpwritejpeg \
targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer
targacmn fpreadtga fpwritetga ellipses fpcolhash fpditherer fpquantizer \
extinterpolation
units_win32=freetypeh freetype ftfont
units_linux=freetypeh freetype ftfont
units_freebsd=freetypeh freetype ftfont

View File

@ -0,0 +1,519 @@
unit extinterpolation;
{
Some more interpolation filters for TFPCanvas.StretchDraw:
Bessel, Gaussian and Sinc are infinite impulse response (IIR),
the other are finite impulse response (FIR). The implementation
of Bessel and Sinc are windowed with Blackman filter.
}
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FPImage, FPCanvas;
type
{ TBlackmanInterpolation }
TBlackmanInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TBlackmanSincInterpolation }
TBlackmanSincInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TBlackmanBesselInterpolation }
TBlackmanBesselInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TGaussianInterpolation }
TGaussianInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TBoxInterpolation }
TBoxInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ THermiteInterpolation }
THermiteInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TLanczosInterpolation }
TLanczosInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TQuadraticInterpolation }
TQuadraticInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TCubicInterpolation }
TCubicInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TCatromInterpolation }
TCatromInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TBilineairInterpolation }
TBilineairInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ THanningInterpolation }
THanningInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ THammingInterpolation }
THammingInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
implementation
// BesselOrderOne: computes Bessel function of x in the first kind of order 0
function J1 (x : double) : double;
const Pone : array[0..8] of double =
( 0.581199354001606143928050809e+21,
-0.6672106568924916298020941484e+20,
0.2316433580634002297931815435e+19,
-0.3588817569910106050743641413e+17,
0.2908795263834775409737601689e+15,
-0.1322983480332126453125473247e+13,
0.3413234182301700539091292655e+10,
-0.4695753530642995859767162166e+7,
0.270112271089232341485679099e+4
);
Qone : array [0..8] of double =
( 0.11623987080032122878585294e+22,
0.1185770712190320999837113348e+20,
0.6092061398917521746105196863e+17,
0.2081661221307607351240184229e+15,
0.5243710262167649715406728642e+12,
0.1013863514358673989967045588e+10,
0.1501793594998585505921097578e+7,
0.1606931573481487801970916749e+4,
0.1e+1
);
var p,q : double;
r : 0..8;
begin
p := Pone[8];
q := Qone[8];
for r := 7 downto 0 do
begin
p := p*x*x+pOne[r];
q := q*X*X+Qone[r];
end;
result := p / q;
end;
function P1 (x : double) : double;
const Pone : array[0..5] of double =
( 0.352246649133679798341724373e+5,
0.62758845247161281269005675e+5,
0.313539631109159574238669888e+5,
0.49854832060594338434500455e+4,
0.2111529182853962382105718e+3,
0.12571716929145341558495e+1
);
Qone : array [0..5] of double =
( 0.352246649133679798068390431e+5,
0.626943469593560511888833731e+5,
0.312404063819041039923015703e+5,
0.4930396490181088979386097e+4,
0.2030775189134759322293574e+3,
0.1e+1
);
var x8,p,q : double;
r : 0..5;
begin
p := Pone[5];
q := Qone[5];
x8 := 8.0 / x;
for r := 4 downto 0 do
begin
p := p*x8*x8+pOne[r];
q := q*x8*x8+Qone[r];
end;
result := p / q;
end;
function Q1 (x : double) : double;
const Pone : array[0..5] of double =
( 0.3511751914303552822533318e+3,
0.7210391804904475039280863e+3,
0.4259873011654442389886993e+3,
0.831898957673850827325226e+2,
0.45681716295512267064405e+1,
0.3532840052740123642735e-1
);
Qone : array [0..5] of double =
( 0.74917374171809127714519505e+4,
0.154141773392650970499848051e+5,
0.91522317015169922705904727e+4,
0.18111867005523513506724158e+4,
0.1038187585462133728776636e+3,
0.1e+1
);
var x8,p,q : double;
r : 0..5;
begin
p := Pone[5];
q := Qone[5];
x8 := 8.0 / x;
for r := 4 downto 0 do
begin
p := p*x8*x8+pOne[r];
q := q*x8*x8+Qone[r];
end;
result := p / q;
end;
function BesselOrderOne (x : double) : double;
var p,q, OneOverSqrt2,sinx,cosx : double;
begin
if x = 0.0 then
result := 0.0
else
begin
p := x;
if x < 0.0 then
x := -x;
if x < 8.0 then
result := p * J1(x)
else
begin
OneOverSqrt2 := 1.0 / sqrt(2.0);
sinx := sin(x);
cosx := cos(x);
result := sqrt(2.0/(PI*x)) *
( P1(x)*(OneOverSqrt2*(sinx-cosx))
- 8.0/x*Q1(x)*(-OneOverSqrt2*(sinx+cosx))
);
if p < 0.0 then
result := -result;
end
end;
end;
// Functions to aid calculations
function Bessel (x : double) : double;
begin
if x = 0.0 then
result := PI / 4.0
else
result := BesselOrderOne(PI * x) / (2.0 * x);
end;
function Sinc (x : double) : double;
var xx : double;
begin
if x = 0.0 then
result := 1.0
else
begin
xx := PI*x;
result := sin(xx) / (xx);
end;
end;
function Blackman (x : double) : double;
var xpi : double;
begin
xpi := PI * x;
result := 0.42 + 0.5 * cos(xpi) + 0.08 * cos(2*xpi);
end;
{ THermiteInterpolation }
function THermiteInterpolation.Filter(x: double): double;
begin
if x < -1.0 then
result := 0.0
else if x < 0.0 then
result := (2.0*(-x)-3.0)*(-x)*(-x)+1.0
else if x < 1.0 then
result := (2.0*x-3.0)*x*x+1.0
else
result := 0;
end;
function THermiteInterpolation.MaxSupport: double;
begin
result := 1.0;
end;
{ TLanczosInterpolation }
function TLanczosInterpolation.Filter(x: double): double;
begin
if x < -3.0 then
result := 0.0
else if x < 0.0 then
result := sinc(-x)*sinc(-x/3.0)
else if x < 3.0 then
result := sinc(x)*sinc(x/3.0)
else
result := 0.0;
end;
function TLanczosInterpolation.MaxSupport: double;
begin
result := 3.0;
end;
{ TQuadraticInterpolation }
function TQuadraticInterpolation.Filter(x: double): double;
begin
if x < -1.5 then
result := 0.0
else if x < -0.5 then
begin
x := x + 1.5;
result := 0.5*x*x;
end
else if x < 0.5 then
result := 0.75 - x*x
else if x < 1.5 then
begin
x := x - 1.5;
result := 0.5*x*x;
end
else
result := 0.0;
end;
function TQuadraticInterpolation.MaxSupport: double;
begin
result := 1.5;
end;
{ TCubicInterpolation }
function TCubicInterpolation.Filter(x: double): double;
begin
if x < -2.0 then
result := 0.0
else if x < -1.0 then
begin
x := x +2.0;
result := x*x*x / 6.0;
end
else if x < 0.0 then
result := (4.0+x*x*(-6.0-3.0*x)) / 6.0
else if x < 1.0 then
result := (4.0+x*x*(-6.0+3.0*x)) / 6.0
else if x < 2.0 then
begin
x := 2.0 - x;
result := x*x*x / 6.0;
end
else
result := 0.0;
end;
function TCubicInterpolation.MaxSupport: double;
begin
result := 2.0;
end;
{ TCatromInterpolation }
function TCatromInterpolation.Filter(x: double): double;
begin
if x < -2.0 then
result := 0.0
else if x < -1.0 then
result := 0.5*(4.0+x*(8.0+x*(5.0+x)))
else if x < 0.0 then
result := 0.5*(2.0+x*x*(-5.0-3.0*x))
else if x < 1.0 then
result := 0.5*(2.0+x*x*(-5.0+3.0*x))
else if x < 2.0 then
result := 0.5*(4.0+x*(-8.0+x*(5.0-x)))
else
result := 0.0;
end;
function TCatromInterpolation.MaxSupport: double;
begin
result := 2.0;
end;
{ THanningInterpolation }
function THanningInterpolation.Filter(x: double): double;
begin
if x < -1.0 then
result := 0.0
else if x <= 1.0 then
result := 0.5+0.5*cos(PI*x)
else
result := 0.0;
end;
function THanningInterpolation.MaxSupport: double;
begin
result := 1.0;
end;
{ THammingInterpolation }
function THammingInterpolation.Filter(x: double): double;
begin
if x < -1.0 then
result := 0.0
else if x <= 1.0 then
result := 0.54+0.46*cos(PI*x)
else
result := 0.0;
end;
function THammingInterpolation.MaxSupport: double;
begin
result := 1.0;
end;
{ TBilineairInterpolation }
function TBilineairInterpolation.Filter(x: double): double;
begin
if x < -1.0 then
result := 0.0
else if x < 0.0 then
result := 1 + x
else if x < 1.0 then
result := 1 - x
else
result := 0.0;
end;
function TBilineairInterpolation.MaxSupport: double;
begin
result := 1.0;
end;
{ TBoxInterpolation }
function TBoxInterpolation.Filter(x: double): double;
begin
if x < -0.5 then
result := 0.0
else if x < 0.5 then
result := 1.0
else
result := 0.0;
end;
function TBoxInterpolation.MaxSupport: double;
begin
result := 0.5;
end;
{ TGaussianInterpolation }
function TGaussianInterpolation.Filter(x: double): double;
begin
result := exp(-2.0*x*x) * sqrt(2.0/PI);
end;
function TGaussianInterpolation.MaxSupport: double;
begin
result := 1.25;
end;
{ TBlackmanBesselInterpolation }
function TBlackmanBesselInterpolation.Filter(x: double): double;
begin
result := Blackman(x/MaxSupport) * Bessel (x);
end;
function TBlackmanBesselInterpolation.MaxSupport: double;
begin
Result := 3.2383;
end;
{ TBlackmanSincInterpolation }
function TBlackmanSincInterpolation.Filter(x: double): double;
begin
Result := Blackman(x/MaxSupport) * Sinc(x);
end;
function TBlackmanSincInterpolation.MaxSupport: double;
begin
Result := 4.0;
end;
{ TBlackmanInterpolation }
function TBlackmanInterpolation.Filter(x: double): double;
begin
Result := Blackman (x);
end;
function TBlackmanInterpolation.MaxSupport: double;
begin
Result := 1.0;
end;
end.

View File

@ -605,3 +605,26 @@ begin
end;
end;
procedure TFPCustomCanvas.StretchDraw(x, y, w, h: integer; source: TFPCustomImage);
var i : TFPCustomInterpolation;
FreeInterpolation : boolean;
IP : TFPCustomInterpolation;
begin
FreeInterpolation := not assigned (FInterpolation);
if FreeInterpolation then
IP := TMitchelInterpolation.Create
else
IP := FInterpolation;
try
with IP do
begin
Initialize (source, self);
Execute (x,y,w,h);
end;
finally
if FreeInterpolation then
IP.Free;
end;
end;

View File

@ -153,6 +153,43 @@ type
end;
TFPCustomBrushClass = class of TFPCustomBrush;
{ TFPCustomInterpolation }
TFPCustomInterpolation = class
private
fcanvas: TFPCustomCanvas;
fimage: TFPCustomImage;
protected
procedure Initialize (aimage:TFPCustomImage; acanvas:TFPCustomCanvas); virtual;
procedure Execute (x,y,w,h:integer); virtual; abstract;
public
property Canvas : TFPCustomCanvas read fcanvas;
property Image : TFPCustomImage read fimage;
end;
{ TFPBaseInterpolation }
TFPBaseInterpolation = class (TFPCustomInterpolation)
private
xfactor, yfactor : double;
xsupport,ysupport : double;
tempimage : TFPCustomImage;
procedure Horizontal (width : integer);
procedure vertical (dx,dy,width,height: integer);
protected
procedure Execute (x,y,w,h:integer); override;
function Filter (x : double) : double; virtual; abstract;
function MaxSupport : double; virtual; abstract;
end;
{ TMitchelInterpolation }
TMitchelInterpolation = class (TFPBaseInterpolation)
protected
function Filter (x : double) : double; override;
function MaxSupport : double; override;
end;
{ TFPCustomCanvas }
TFPCustomCanvas = class(TPersistent)
@ -170,6 +207,7 @@ type
FClipRect : TRect;
FHelpers : TList;
FLocks : integer;
FInterpolation : TFPCustomInterpolation;
function AllowFont (AFont : TFPCustomFont) : boolean;
function AllowBrush (ABrush : TFPCustomBrush) : boolean;
function AllowPen (APen : TFPCustomPen) : boolean;
@ -219,8 +257,6 @@ type
procedure DoMoveTo (x,y:integer); virtual;
procedure DoLineTo (x,y:integer); virtual;
procedure DoLine (x1,y1,x2,y2:integer); virtual; abstract;
procedure DoCopyRect (x,y:integer; canvas:TFPCustomCanvas; Const SourceRect:TRect); virtual; abstract;
procedure DoDraw (x,y:integer; Const image:TFPCustomImage); virtual; abstract;
procedure CheckHelper (AHelper:TFPCanvasHelper); virtual;
procedure AddHelper (AHelper:TFPCanvasHelper);
public
@ -259,11 +295,13 @@ type
// other procedures
procedure CopyRect (x,y:integer; canvas:TFPCustomCanvas; SourceRect:TRect);
procedure Draw (x,y:integer; image:TFPCustomImage);
procedure StretchDraw (x,y,w,h:integer; source:TFPCustomImage);
procedure Erase;virtual;
// properties
property Font : TFPCustomFont read GetFont write SetFont;
property Pen : TFPCustomPen read GetPen write SetPen;
property Brush : TFPCustomBrush read GetBrush write SetBrush;
property Interpolation : TFPCustomInterpolation read FInterpolation write FInterpolation;
property Colors [x,y:integer] : TFPColor read GetColor write SetColor;
property ClipRect : TRect read GetClipRect write SetClipRect;
property Clipping : boolean read FClipping write FClipping;
@ -375,6 +413,7 @@ end;
{$i FPFont.inc}
{$i FPPen.inc}
{$i FPBrush.inc}
{$i fpinterpolation.inc}
{$i FPCanvas.inc}
{$i FPCDrawH.inc}

View File

@ -0,0 +1,216 @@
{ TFPCustomInterpolation }
procedure TFPCustomInterpolation.Initialize(aimage: TFPCustomImage; acanvas: TFPCustomCanvas);
begin
fimage := aimage;
fcanvas := acanvas;
end;
{ TFPBaseInterpolation }
type
TInterpolationContribution = record
weight : double;
place : integer;
end;
function ColorRound (c : double) : word;
begin
if c > $FFFF then
result := $FFFF
else if c < 0.0 then
result := 0
else
result := round(c);
end;
procedure TFPBaseInterpolation.Horizontal (width : integer);
var x,y,r : integer;
start, stop, maxcontribs : integer;
center, re,gr,bl, density : double;
contributions : array[0..10] of TInterpolationContribution;
dif, w, gamma, a : double;
c : TFPColor;
begin
for x := 0 to width-1 do
begin
center := x * xfactor;
start := round (center-xsupport);
if start < 0 then
start := 0;
stop := round(center+xsupport);
if stop >= image.Width then
stop := image.Width-1;
density := 0.0;
maxcontribs := -1;
for r := start to stop do
begin
dif := r - center;
w := Filter (dif);
if w > 0.0 then
begin
inc (maxcontribs);
with contributions[maxcontribs] do
begin
weight := w;
density := density + w;
place := r;
end;
end;
end;
if (density <> 0.0) and (density <> 1.0) then
begin
density := 1.0 / density;
for r := 0 to maxcontribs do
contributions[r].weight := contributions[r].weight * density;
end;
for y := 0 to image.height-1 do
begin
gamma := 0.0;
re := 0.0;
gr := 0.0;
bl := 0.0;
for r := 0 to maxcontribs do
with contributions[r] do
with image.colors[place,y] do
begin
a := weight * alpha / $FFFF;
re := re + a * image.colors[place,y].red;
gr := gr + a * image.colors[place,y].green;
bl := bl + a * image.colors[place,y].blue;
gamma := gamma + a;
end;
with c do
begin
red := ColorRound (re);
green := ColorRound (gr);
blue := ColorRound (bl);
alpha := ColorRound (gamma * $FFFF) ;
end;
tempimage.colors[x,y] := c;
end;
end;
end;
procedure TFPBaseInterpolation.vertical(dx,dy,width,height: integer);
var x,y,r : integer;
start, stop, maxcontribs : integer;
center, re,gr,bl, density : double;
contributions : array[0..10] of TInterpolationContribution;
dif, w, gamma, a : double;
c : TFPColor;
begin
for y := 0 to height-1 do
begin
center := y * yfactor;
start := round (center-ysupport);
if start < 0 then
start := 0;
stop := round(center+ysupport);
if stop >= tempimage.height then
stop := tempimage.height-1;
density := 0.0;
maxcontribs := -1;
for r := start to stop do
begin
dif := r - center;
w := Filter (dif);
if w > 0.0 then
begin
inc (maxcontribs);
with contributions[maxcontribs] do
begin
weight := w;
density := density + w;
place := r;
end;
end;
end;
if (density <> 0.0) and (density <> 1.0) then
begin
density := 1.0 / density;
for r := 0 to maxcontribs do
contributions[r].weight := contributions[r].weight * density;
end;
for x := 0 to width-1 do
begin
gamma := 0.0;
re := 0.0;
gr := 0.0;
bl := 0.0;
for r := 0 to maxcontribs do
with contributions[r] do
with tempimage.colors[x,place] do
begin
a := weight * alpha / $FFFF;
re := re + a * red;
gr := gr + a * green;
bl := bl + a * blue;
gamma := gamma + a;
end;
with c do
begin
red := ColorRound (re);
green := ColorRound (gr);
blue := ColorRound (bl);
alpha := ColorRound (gamma * $FFFF);
end;
canvas.colors[x+dx,y+dy] := c;
end;
end;
end;
procedure TFPBaseInterpolation.Execute(x, y, w, h: integer);
var maxy : integer;
rx,ry : integer;
begin
tempimage := TFPMemoryImage.Create (w,image.height);
tempimage.UsePalette := false;
xfactor := image.Width / w;
yfactor := image.Height / h;
if xfactor > 1.0 then
xsupport := MaxSupport
else
xsupport := xfactor * MaxSupport;
if yfactor > 1.0 then
ysupport := MaxSupport
else
ysupport := yfactor * MaxSupport;
Horizontal (w);
Vertical (x,y,w,h);
end;
{ TMitchelInterpolation }
function TMitchelInterpolation.Filter(x: double): double;
const
B = (1.0/3.0);
C = (1.0/3.0);
P0 = (( 6.0- 2.0*B )/6.0);
P2 = ((-18.0+12.0*B+ 6.0*C)/6.0);
P3 = (( 12.0- 9.0*B- 6.0*C)/6.0);
Q0 = (( 8.0*B+24.0*C)/6.0);
Q1 = (( -12.0*B-48.0*C)/6.0);
Q2 = (( 6.0*B+30.0*C)/6.0);
Q3 = (( - 1.0*B- 6.0*C)/6.0);
begin
if (x < -2.0) then
result := 0.0
else if (x < -1.0) then
result := Q0-x*(Q1-x*(Q2-x*Q3))
else if (x < 0.0) then
result := P0+x*x*(P2-x*P3)
else if (x < 1.0) then
result := P0+x*x*(P2+x*P3)
else if (x < 2.0) then
result := Q0+x*(Q1+x*(Q2+x*Q3))
else
result := 0.0;
end;
function TMitchelInterpolation.MaxSupport: double;
begin
result := 2.0;
end;