Code archives/Graphics/Resize image fast
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| How resize an image ? It's a little bit rock n roll under bmax :) but this is a simple method :) | |||||
' ------------
' Open graphic
' ------------
Graphics 1024,768,0
Global MyIMage01:Timage=LoadImage("colourblind.jpeg")
Global MyIMage02:Timage=ResizeImage(MyIMage01,256,256)
' -------------
' The main loop
' -------------
While Not KeyHit(KEY_ESCAPE)
Cls
DrawImage MyIMage02,0,0
' ------------------------
' Swap buffer and flushmem
' ------------------------
Flip
Wend
Function ResizeImage:Timage(Image:TImage,Tx:Int,Ty:Int)
Local x
Local y
Local c
Local Pixmap:TPixmap
Local Duplicate:TPixmap
Local Output:Timage
Duplicate=CreatePixmap(ImageWidth(Image),ImageHeight(Image),PF_RGB888)
Pixmap = LockImage(Image)
For x = 0 To ImageWidth(Image) - 1
For y = 0 To ImageHeight(Image) - 1
c=ReadPixel(Pixmap, x, y)
WritePixel(Duplicate, x,y,c)
Next
Next
UnlockImage(Image)
Pixmap= Null
Resized=ResizePixmap(Duplicate,Tx,Ty)
Output=CreateImage(Tx,Ty)
Pixmap=LockImage(Output)
For x = 0 To Tx-1
For y = 0 To Ty-1
c=ReadPixel(Resized, x, y)
WritePixel(Pixmap, x,y,c)
Next
Next
UnlockImage(Output)
Duplicate= Null
Pixmap= Null
Return Output
End Function |
Comments
| ||
or even simpler:Function ResizeImage:TImage(image:TImage,width,height) Local pix:TPixmap=LockImage(image) pix=ResizePixmap(pix,width,height) UnlockImage(image) Return LoadImage(pix) End Function |
| ||
| Thanks, Skid :c) |
| ||
| Can it be done without a 'size up' making the image more blurry each time? |
| ||
@tonyg: of course...
Strict
Framework BRL.GlMax2d
Import BRL.JpgLoader
Import BRL.Retro
SetGraphicsDriver GLMax2DDriver()
Graphics 800,600,0,0
SetBlend ALPHABLEND
Global pic:TImage = LoadImage("pic.jpg")
SeedRnd MilliSecs()
Repeat
Cls
If KeyHit(KEY_SPACE)
Local width:Short = Rnd(320,800)
pic = ResizeImage(pic,width)
EndIf
DrawImage pic,0,0
Flip
FlushMem()
Until KeyHit(KEY_ESCAPE)
End
Function ResizeImage:TImage(image:TImage,new_width:Short)
Global backup:TIMage
If backup = Null Then backup = image
Local new_height:Short = (backup.height*new_width/backup.width)
Local pix:TPixmap=LockImage(backup)
pix=ResizePixmap(pix,new_width,new_height)
UnlockImage(backup)
Return LoadImage(pix)
End Function
|
| ||
Looks like that has the same problem BruZard.
Function ResizeImage:TImage(image:TImage,width,height)
Local pix:TPixmap=LockImage(image)
pix=ResizePixmap(pix,width,height)
UnlockImage(image)
Return LoadImage(pix)
End Function
SetGraphicsDriver GLMax2DDriver()
Graphics 800,600,0
image:TImage=LoadImage("max.png",filteredimage)
While Not KeyHit(key_escape)
Cls
If KeyHit(key_space)
If ImageWidth(image)=256
image=resizeimage(image,128,128)
Else
image=resizeimage(image,256,256)
EndIf
EndIf
DrawImage image,0,0
Flip
FlushMem
Wend
Keep pressing spacebar and notice the 256*256 image gets progressively more blurry. |
| ||
| No, have a look on my post ... i have made a backup from the image and store that as global. After the first resize i ever use the backup and not the image. excuse my bad english... |
| ||
| Yep, sorry. It looks good. No idea what I was doing before. |
Code Archives Forum