Login Register
Frontpage Code library Pastebin

ScaleImage (tehnyt: Marcoder)

Author: Jare
Added: 9.4.2011 22:11
Edited: 15.4.2011 22:19
Category: Grafiikka

Description

Skaalaa kuvia nopeammin kuin CB:n ResizeImage-komento. Tätä on aikojen saatossa moni kysellyt, niin päätin laittaa tänne, vaikka en ole itse tehnyt.

Code

Select all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
SCREEN 1152,864,32,0

Global gScaledImage
gScaledImage = MakeImage(1, 1)

img = LoadImage("media/car.bmp")

Repeat
   DrawImage ScaleImage(img, MouseX(), MouseY()), 0, 0
   Text 0, 0, FPS()
   DrawScreen
Forever

Function ScaleImage(_image, _width, _height)
   //By: Marcoder

   // Jos koko ei ole muuttunut niin ei tehdä mitään
   If _width = ImageWidth(gScaledImage) And _height = ImageHeight(gScaledImage) Then Return gScaledImage
   If _width <= 0 Or _height <= 0 Then Return gScaledImage
   
   DeleteImage gScaledImage
   gScaledImage = MakeImage(_width, _height)
   
   // Tehdään temppikuva johon skaalataan ensin vain leveys
   lTempImage = MakeImage(_width, ImageHeight(_image))
   DrawToImage lTempImage
   For x = 0 To _width - 1
       sx# = Float(ImageWidth(_image)) / Float(_width) * Float(x)
       DrawImageBox _image, x, 0, sx, 0, 1, ImageHeight(_image)
   Next x
   DrawToScreen
   
   // Skaalataan myös pystysuunnassa
   DrawToImage gScaledImage
   For y = 0 To _height - 1
       sy# = Float(ImageHeight(_image)) / Float(_height) * Float(y)
       DrawImageBox lTempImage, 0, y, 0, sy, ImageWidth(lTempImage), 1
   Next y
   DrawToScreen
   DeleteImage lTempImage

   Return gScaledImage
End Function

Comments

No comments. You can be first!

Leave a comment

You must be logged in to comment.