Code archives/Graphics/Background Image Creator
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| little tool to create background images for PSP,Pocket PC,Handy . you can drag&drop an image(foto) on this exe and quick select a area (and scale) that have the output size of your handheld . (the source image will fit in the window with correct ratio) if you press S for save , the area will interpolated to output size and the pic are saved as jpeg . | |||||
Strict
'BlitzMax 1.22
'M.Rauch 25.10.2006
'Programm womit man sich Hintergrundbilder für PSP,Pocket PC oder Handy machen kann
Const NeedX=480
Const NeedY=272
Local a$,b$
Local width:Int=1024,height:Int=768,depth:Int=0,herz:Int=72,gl=0
Global Bild:String="Test.jpg"
'Programm Command Line width 1280 height 1024 gl 1
For a$=EachIn AppArgs
If b$="width" Then
width=Int(a$)
ElseIf b$="height" Then
height=Int(a$)
ElseIf b$="depth" Then
depth=Int(a$)
ElseIf b$="herz" Then
herz=Int(a$)
ElseIf b$="gl" Then
gl=True
EndIf
a$=Lower(a$)
If Instr(a$,".jpg")=>1 Or Instr(a$,".bmp")=>1 Or Instr(a$,".gif")=>1 Or Instr(a$,".png")=>1 Then
bild$=a$
Else
b$=a$
EndIf
Next
If gl Then SetGraphicsDriver GLMax2DDriver()
If GraphicsModeExists(width,height,depth,herz)=True Then
Graphics width,height,depth,herz
Else
Graphics 640,480
EndIf
MainLoop()
End
Function MainLoop()
Local resize:Int=False
Local startx:Int
Local starty:Int
Local startxx:Int=-1
Local startyy:Int
Local endx:Int
Local endy:Int
Local endxx:Int
Local endyy:Int
Local scale:Float=0
startx=0
starty=0
endx=startx+needx-1
endy=starty+needy-1
resize=True
Local mu:Float=0 'für Interpolation
Local mwheel:Int=0
Local md1:Int,mu1:Int,md2:Int,mu2:Int,md3:Int,mu3:Int 'Maus Abfrage
Local mx:Int,my:Int,mz:Int
'-----------------------------------
Local pix:TPixmap
Local img:TImage=LoadImage(Bild)
If img Then
pix=LockImage(img,0,True,True)
ConvertPixmap pix,PF_RGB888
If pix.width>GraphicsWidth() Or pix.height>GraphicsHeight() Then
pix=FitPixmap(pix,GraphicsWidth(),GraphicsHeight())
EndIf
UnlockImage img
EndIf
'-----------------------------------
While Not KeyHit(KEY_ESCAPE)
Cls
If pix Then
DrawPixmap pix,0,0
SetColor 255,255,255
'DrawText bild,12,36
Else
SetColor 255,255,255
DrawText "image not found !? '" + bild + "'",0,0
EndIf
mx=MouseX()
my=MouseY()
mz=MouseZ()
mu1=0;If md1=1 Then md1=2
If MouseDown(1)=True And md1=0 Then md1=1;mu1=0
If MouseDown(1)=False And md1=2 And mu1=0 Then md1=0;mu1=1
mu2=0;If md2=1 Then md2=2
If MouseDown(2)=True And md2=0 Then md2=1;mu2=0
If MouseDown(2)=False And md2=2 And mu2=0 Then md2=0;mu2=1
mu3=0;If md3=1 Then md3=2
If MouseDown(3)=True And md3=0 Then md3=1;mu3=0
If MouseDown(3)=False And md3=2 And mu3=0 Then md3=0;mu3=1
If md2=1 Then
scale=scale+0.05;resize=True;If scale>1.0 Then scale=0;resize=True
EndIf
If md3=1 Then
scale=0;resize=True
EndIf
If md1=2 Then
resize=True
startx=mx-(needx/2)
starty=my-(needy/2)
If startx<0 Then startx=0
If starty<0 Then starty=0
endx=startx+needx-1
endy=starty+needy-1
EndIf
If resize=True Then
resize=False
startxx=startx-(needx*scale)
startyy=starty-(needy*scale)
endxx=endx+(needx*scale)
endyy=endy+(needy*scale)
EndIf
If startxx=>0 And startyy=>0 Then
SetBlend ALPHABLEND
SetAlpha 0.25
SetColor 128,128,128
DrawRect startxx,startyy,(endxx-startxx)+1,(endyy-startyy)+1
SetColor 255,255,0
mRect startxx,startyy,endxx,endyy
SetBlend SOLIDBLEND+MASKBLEND
SetAlpha 1
Else
SetColor 255,0,0
mRect startxx,startyy,endxx,endyy
EndIf
SetColor 255,255,255
DrawText "Left Mouse = Area , Right Mouse = Scale ",12,12
DrawText "ESC = End , S = Save jpg",12,24
If KeyHit(KEY_S) Then
If startx>-1 Then
Save bild,pix,startxx,startyy,endxx,endyy
EndIf
EndIf
Flip
Delay 20
Wend
End Function
Function Save(Name:String,pix:TPixmap,x1:Int,y1:Int,x2:Int,y2:Int)
Local NameNeu:String
NameNeu="bg"+StripDir(StripExt(Lower(Name)))+".jpg"
Local x:Int,y:Int
Local xr:Int,yr:Int
Local pixbg:TPixmap=CreatePixmap(needx,needy,PF_RGB888)
Local c:Int
For x=0 To needx-1
For y=0 To needy-1
xr=Intp(Float(x1),Float(x2),Float(x)/Float(needx-1))
yr=Intp(Float(y1),Float(y2),Float(y)/Float(needy-1))
Limit xr,0,PixmapWidth(pix)-1
Limit yr,0,PixmapHeight(pix)-1
c=ReadPixel(pix,xr,yr)
WritePixel pixbg,x,y,c
Next
Next
SavePixmapJPeg pixbg,NameNeu,80 '<- noch bugy ? wird im IE und VB falsch oder gar nicht angezeigt
Cls
DrawPixmap pixbg,0,0
SetColor 255,255,255
DrawText "Saved as "+NameNeu,12,12
DrawText "Click Mouse",12,24
Flip
WaitMouse
FlushMouse
End Function
Function FitPixmap:TPixmap(pix:TPixmap,w:Float,h:Float,Zoom:Int=True)
'MR 10.07.2005
'Fit a Pixmap to width,height with correct ratio
If pix=Null Then Return Null
Local f1:Float,f2:Float
Local pw:Float,ph:Float
pw=pix.width
ph=pix.height
f1 = 1.0
f2 = 1.0
If Zoom Then
If pw <> w Then 'with ZOOM <>
f1 = w / pw
End If
If ph <> h Then
f2 = h / ph
End If
Else
If pw > w Then 'without ZOOM >
f1 = w / pw
End If
If ph > h Then
f2 = h / ph
End If
EndIf
If f2 < f1 Then f1 = f2
pix=ResizePixmap(pix,f1*pw,f1*ph)
Return pix
End Function
Function mRect(x1,y1,x2,y2)
DrawLine x1,y1,x2,y1 'oben
DrawLine x2,y1,x2,y2 'rechts
DrawLine x1,y2,x2,y2 'unten
DrawLine x1,y1,x1,y2 'links
End Function
Function Intp:Float(y1:Float,y2:Float,mu:Float)
Return y1+(y2-y1)*mu
End Function
Function Limit(a:Int Var,x:Int ,y:Int )
If a<x Then a=x
If a>y Then a=y
End Function |
Comments
None.
Code Archives Forum