Page 1 of 1
Antialiasing vs ResizeImage
Posted: Fri Mar 17, 2017 7:41 pm
by walbus
ResizeImage make Antialiasing simple available
But, unfortunately, this works only the image is resized
For now not making a great thing, the ask.
It is available changing ResizeImage so, Antialiasing is available also without any resizing ?
Resizing just to get Antialiasing is a bad thing
Calling ResizeImage without any resizing, but a active Antialiasing, is a simple solution without any PB syntax changing, i think ....
Re: Antialiasing vs ResizeImage
Posted: Fri Mar 17, 2017 10:24 pm
by IdeasVacuum
Hi Walbus
Calling ResizeImage without any resizing, but a active Antialiasing,
Can't we actually do that now? Give ResizeImage the current image size such that it isn't resized but is antialiased? Worth a try....
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 12:38 am
by Dude
IdeasVacuum wrote:Give ResizeImage the current image size such that it isn't resized but is antialiased?
Doesn't work.
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 2:17 am
by nco2k
purebasic doesnt use an anti-aliasing algorithm, it uses interpolation:
https://en.m.wikipedia.org/wiki/Image_scaling
c ya,
nco2k
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 7:58 am
by walbus
Hi folks,
no, without resizing, unfortunately, it works not
Also it looks, Nco2k is right, it's not antialiasing, it's a interpolation
In the future the canvas gadget is more and more important and a PB enhanced output with antialiasing a very good feature, i think
Especially a mixed output with the vector and the 2d library can make ugly edges, so this looks very helpfull for cosmetic
Regards werner
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 9:37 am
by Michael Vogel
Why should something happen to the image without resizing it? There's no additional information to be interpreted for calculating new content.
And there's also no possibility to get a "smoother" content by doubling an existing image and reducing it again - just because og the used algorithm.
So this will "fail" also...
w=width, h=height
ResizeImage(n,w*2,h*2,#raw)
ResizeImage(n,w,h,#smooth)
So if you want to get a "better" quality for images, use bigger sizes while manipulating - this is seen especially when using text.
Short example:
Code: Select all
; Define - - - LoadImage Dummy Procedure by Michael Vogel
Procedure LoadImage_(id,name.s,x,y)
Protected z
#VoxMin=160
#VoxMax=800
#VoyMin=100
#VoyMax=600
If FileSize(name)>0
ProcedureReturn LoadImage(id,name,x)
Else
If x*y=#Null
x=#VoxMin+Random(#VoxMax-#VoxMin)
y=#VoyMin+Random(#VoyMax-#VoyMin)
EndIf
z=CreateImage(id,x,y)
If z
If id=#PB_Any
id=z
EndIf
StartDrawing(ImageOutput(id))
DrawingMode(#PB_2DDrawing_Gradient)
BackColor($FFFFFF)
GradientColor(0.3,$404040|Random(#White))
GradientColor(0.7,#White)
GradientColor(0.7,$404040|Random(#White))
FrontColor($FFFFFF)
LinearGradient(0,0,x,y)
Box(0,0,x,y,$FFFFFF)
DrawingMode(#PB_2DDrawing_AlphaBlend)
For i=0 To x>>3
Circle(Random(x),Random(y),Random(y>>3),$60000000|Random(#White))
Next i
StopDrawing()
ProcedureReturn id
EndIf
ProcedureReturn #Null
EndIf
EndProcedure
Macro LoadImage(a,b,c=0,d=0)
LoadImage_(a,b,c,d)
EndMacro
; EndDefine
w=400
h=500
LoadFont(0,"Arial",-160,#PB_Font_HighQuality)
LoadImage(1,#PB_Compiler_Home + "Examples/Sources/Data/PureBasic.bmp",w*2,h*2)
StartDrawing(ImageOutput(1))
DrawingFont(FontID(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
DrawText(0,0,"Ax%ß6@",$FF000000,0)
DrawText(0,200,"Ax%ß6@",$FFFFFFFF,0)
StopDrawing()
CopyImage(1,2)
OpenWindow(0, 0, 0, w*2,h, "-", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ResizeImage(1,w,h,#PB_Image_Raw); nearly identical to standard size
ImageGadget(1, 0,0, w,h, ImageID(1))
ResizeImage(2,w,h)
ImageGadget(2, w,0, w,h, ImageID(2)); smooth content by using an enlarged image
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 9:43 am
by Dude
Michael Vogel wrote:there's also no possibility to get a "smoother" content by doubling an existing image and reducing it again
True, but you can create the image at double its intended height and then reduce it by half, to get anti-aliasing.
See my example here:
http://www.purebasic.fr/english/viewtop ... 1&p=461549
The only trouble with that, is that the image looks "lighter" or "brighter" than it should be.
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 9:52 am
by walbus
@Michael,
With ResizeImage i have test this and that, the result was mostly not good
@Dude
Yep, this works, but the double resizing "eat" ever a little content
Primary for me self is each working method welcome
Regards werner
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 11:34 am
by Michael Vogel
You're right, but I wouldn't say that resizing images is critical in all cases. Just change your example to use a factor=2, 4 etc. and adapt the line width to the factor, the results are quite good then...
Code: Select all
#Factor=4; Quick and dirty adaption of the line width - only for demonstration
Macro CreateImage_AA(img,w,h,depth=24,color=0)
CreateImage(img,w*#Factor,h*#Factor,depth,color)
EndMacro
Macro Circle_AA(x,y,radius,color=#PB_Default)
For i=0 To #Factor>>1
Circle(x*#Factor,y*#Factor,radius*#Factor+i,color)
Next i
EndMacro
Macro LineXY_AA(x1,y1,x2,y2,color=#PB_Default)
For i=0 To #Factor>>1
LineXY(x1*#Factor+i,y1*#Factor,x2*#Factor+i,y2*#Factor,color)
Next i
EndMacro
Macro Finish_AA(img)
ResizeImage(img,ImageWidth(img)/#factor,ImageHeight(img)/#factor)
EndMacro
OpenWindow(0,0,0,680,280,"Anti-Alias Macros",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
; Normal 2D circle with line.
CreateImage(1,320,240,32,#White)
StartDrawing(ImageOutput(1))
DrawingMode(#PB_2DDrawing_Outlined)
Circle(160,120,100,#Blue)
LineXY(0,0,320,240,#Red)
StopDrawing()
; Anti-aliased 2D circle with line.
CreateImage_AA(2,320,240,32,#White)
StartDrawing(ImageOutput(2))
DrawingMode(#PB_2DDrawing_Outlined)
Circle_AA(160,120,100,#Blue)
LineXY_AA(0,0,320,240,#Red)
StopDrawing()
Finish_AA(2) ; Required when AA drawing is done.
ImageGadget(1,10,10,320,240,ImageID(1))
ImageGadget(2,350,10,320,240,ImageID(2))
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
...and for drawing nice fonts (
example1,
example2 etc.) there's no other possibility (which means not only more memory but also more processing time).
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 12:40 pm
by Dude
Thanks Michael! Looks much better.
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 1:30 pm
by walbus
Yep, this code works fine
For demonstrating good, unfortunately, for realy using to "hungry" and non flexible
Looking here, this temporary snippet image demonstrate the problems with the vector output mixed with the other 2D output

Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 2:08 pm
by nco2k
the point of anti-aliasing is to smooth out the edges of the polygons
during the composition, and not on an already finished frame. so i dont really know how you expect this to work. you could use some sort of post-processing, but it would make your image blurry as hell. the best you could do is to process the image at 2x or 4x of its size and downsample it, like Michael Vogel already pointed out. which is btw similar to how super sampling anti-aliasing works.
>> demonstrate the problems with the vector output mixed with the other 2D output
well, you cant expect edge free vector graphics to look good on a low resolution pixel background. this "problem" exists since the invention of computers.
c ya,
nco2k
Re: Antialiasing vs ResizeImage
Posted: Sat Mar 18, 2017 2:46 pm
by walbus
Yep, its so you say
Its also not a realy problem, with higher resulutions this problems gone more and more in the future