superadnim wrote:"pb's" resize is just gdi in windows.
doesn't seem so, with other programming languages (hopefully using the API) I never had these problems...
...and believe me, I tried a lot of things (maybe they have all been wrong) to get images correctly resized, like the following:
Code: Select all
; offen: Dekstop-Tiefe ohne ExamineDesktops
; gelöst: Überblenden geht nicht (Schatten des letzten Bilds)
; offen: Resize-Fehler
;{
Global ScreenX=1024;GetSystemMetrics_(#SM_CXSCREEN)
Global ScreenY=768;GetSystemMetrics_(#SM_CYSCREEN)
Global FrameSizeX=ScreenX*0.72;640
Global FrameSizeY=ScreenY*0.74;0.9;540
Structure PictStruct
id.l
x.l
y.l
w.l
h.l
EndStructure
Global Dim Picture.PictStruct(1)
;}
Procedure ScalePicture(n)
Protected factor.f
Picture(n)\w=ImageWidth(n)
Picture(n)\h=ImageHeight(n)
If Picture(n)\w>FrameSizeX
factor=FrameSizeX/Picture(n)\w
Picture(n)\w*factor
Picture(n)\h*factor
EndIf
If Picture(n)\h>FrameSizeY
factor.f=FrameSizeY/Picture(n)\h
Picture(n)\w*factor
Picture(n)\h*factor
EndIf
Picture(n)\id=ImageID(n)
Picture(n)\x=(ScreenX-Picture(n)\w)>>1
Picture(n)\y=(ScreenY-Picture(n)\h)>>1
; DOES NOT WORK!!!!!
;ResizeImage(n,Picture(n)\w,Picture(n)\h,#PB_Image_Smooth)
If IsSprite(n) : FreeSprite(n) : EndIf
CreateSprite(n,Picture(n)\w,Picture(n)\h,#PB_Sprite_Texture)
; "Workaround"...
StartDrawing(SpriteOutput(n))
; DOES NOT WORK WITH CERTAIN PICTURES
; - even when used with 32 bit colors - small black rectangles at the top etc.
; - but more problems with 16/24 bit modes - strange stripes etc.
DrawImage(Picture(n)\id,0,0,Picture(n)\w,Picture(n)\h); because Resize doesn't work
StopDrawing()
If IsSprite3D(n) : FreeSprite3D(n) : EndIf
CreateSprite3D(n,n)
EndProcedure
UseJPEGImageDecoder()
If (InitSprite() And InitSprite3D())
If OpenScreen(ScreenX,ScreenY,32,"Diashow")
; ////////
LoadImage(0,"E:\Programs\Prog\Source\!Fade\CIMG0172.jpg",#PB_Image_DisplayFormat)
; ///////
; /////////////////
x=2
; /////////////////
FlipBuffers()
Select x
Case 1
; here's everything ok...
StartDrawing(ScreenOutput())
DrawImage(ImageID(0),0,0,Picture(n)\w,Picture(n)\h)
StopDrawing()
Case 2
; this picture already does not look perfect
ScalePicture(0)
StartDrawing(ScreenOutput())
DrawImage(Picture(n)\id,0,0);,Picture(n)\w,Picture(n)\h)
StopDrawing()
Case 3
; target - for fade effect in dia show
ScalePicture(0)
Start3D()
DisplaySprite3D(0,Picture(0)\x,Picture(0)\y,255)
Stop3D()
EndSelect
FlipBuffers()
Delay(5000)
EndIf
EndIf
Result:

(
http://sudokuprogram.googlepages.com/CIMG0172.jpg) will be resized into something like

(
http://sudokuprogram.googlepages.com/ResizeError.jpg)!
No I really have no more ideas, what to do...