Bitmap/AutoHotkey: Difference between revisions

From Rosetta Code
Content added Content deleted
mNo edit summary
(added writeppm function, fixed memory allocation in bitmap instantiator)
Line 4: Line 4:
blue := color(0,0,255) ; rgb
blue := color(0,0,255) ; rgb
cyan := color(0,255,255)
cyan := color(0,255,255)
MsgBox % "blue:r,g,b,rgb " blue.R "," blue.G "," blue.B ", " blue.rgb()
MsgBox % "cyan:r,g,b,rgb " cyan.R "," cyan.G "," cyan.B ", " cyan.RGB()
blue_square := Bitmap(10, 10, blue)
blue_square := Bitmap(10, 10, blue)
cyanppm := Bitmap(10, 10, cyan)
x := blue_square[4,4] ; get pixel(4,4)
x := blue_square[4,4] ; get pixel(4,4)
msgbox % "blue: 4,4,R,G,B, RGB: " x.R ", " x.G ", " x.B ", " x.rgb()
msgbox % "blue: 4,4,R,G,B, RGB: " x.R ", " x.G ", " x.B ", " x.rgb()
blue_square[4,4] := cyan ; set pixel(4,4)
blue_square[4,4] := cyan ; set pixel(4,4)
x := blue_square[4,4] ; get pixel(4,4)
x := blue_square[4,4] ; get pixel(4,4)
blue_square.write("blue.ppm")
msgbox % "cyan: 4,4,R,G,B, RGB: " x.R ", " x.G ", " x.B ", " x.rgb()
return
return


Line 24: Line 23:
if !BitmapType
if !BitmapType
BitmapType
BitmapType
:= Object("fill", "Bitmap_Fill")
:= Object("fill", "Bitmap_Fill"
,"write", "Bitmap_write_ppm3")


img := Object("width", width
img := Object("width", width
Line 30: Line 30:
, "base" , BitmapType)
, "base" , BitmapType)


img._SetCapacity(width * height)
img._SetCapacity(height) ; an array of rows
img.fill(background)
img.fill(background)
Return img
Return img
Line 50: Line 50:
}
}


Bitmap_write_ppm3(bitmap, filename)
{
file := FileOpen(filename, 0x11) ; utf-8, write
file.seek(0,0)
file.write("P3`n"
. bitmap.width . " " . bitmap.height . "`n"
. "255`n")
loop % bitmap.height
{
height := A_Index
loop % bitmap.width
{
width := A_Index
color := bitmap[height, width]
file.Write(color.R . " ")
file.Write(color.G . " ")
file.Write(color.B . " ")
}
file.write("`n")
}
file.close()
return 0
}


Color(r, g, b)
Color(r, g, b)
Line 67: Line 90:
{
{
return clr.R << 16 | clr.G << 8 | clr.B
return clr.R << 16 | clr.G << 8 | clr.B
}</lang>
}

!r::reload
!q::exitapp</lang>

Revision as of 18:12, 9 February 2010

Bitmap/AutoHotkey is part of Basic bitmap storage. You may find other members of Basic bitmap storage at Category:Basic bitmap storage.
Works with: AutoHotkey_L version 45

<lang AutoHotkey>test: blue := color(0,0,255)  ; rgb cyan := color(0,255,255) blue_square := Bitmap(10, 10, blue) cyanppm := Bitmap(10, 10, cyan) x := blue_square[4,4] ; get pixel(4,4) msgbox % "blue: 4,4,R,G,B, RGB: " x.R ", " x.G ", " x.B ", " x.rgb() blue_square[4,4] := cyan ; set pixel(4,4) x := blue_square[4,4] ; get pixel(4,4) blue_square.write("blue.ppm") return

Bitmap(width = 1, height = 1, background = 0) { global black black := color(0,0,0) if !background background := black

   static BitmapType
   if !BitmapType
       BitmapType
       := Object("fill", "Bitmap_Fill"

,"write", "Bitmap_write_ppm3")

img := Object("width", width

               ,"height", height
               , "base"    , BitmapType)

img._SetCapacity(height) ; an array of rows

 img.fill(background)

Return img }


Bitmap_Fill(bitmap, color) {

 loop % bitmap.height
 {
   height := A_Index
   loop % bitmap.width
   {
     width := A_Index
     bitmap[height, width] := color
   }
 }
return bitmap

}

Bitmap_write_ppm3(bitmap, filename) { file := FileOpen(filename, 0x11) ; utf-8, write file.seek(0,0) file.write("P3`n" . bitmap.width . " " . bitmap.height . "`n" . "255`n")

 loop % bitmap.height
 {
   height := A_Index
   loop % bitmap.width
   {
     width := A_Index
     color := bitmap[height, width] 
     file.Write(color.R . " ")
     file.Write(color.G . " ")
     file.Write(color.B . " ")
   }
   file.write("`n")
 }
 file.close()
return 0

}

Color(r, g, b) {

   static ColorType
   if !ColorType
       ColorType
       := Object("rgb"   , "Color_rgb")
   return Object("r" , r, "g", g, "b", b
               , "base"    , ColorType)
; return Object("r" , r, "g", g, "b", b, "rgb", "Color_rgb")

}

Color_rgb(clr) { return clr.R << 16 | clr.G << 8 | clr.B }</lang>