Rotateimage ungenau
Übersicht

![]() |
SpionAtomBetreff: Rotateimage ungenau |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo allerseits,
mir bereitet der Rotateimage-Befehl Probleme. Ich versuche ein quadratisches Bild 4x um 90° zu drehen. Das Ergebnis ist, dass sich Größe leicht verändert. Was kann ich da machen? Hier ein Beispiel |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
PlasmaBetreff: hmm so ? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 800,600 AutoMidHandle 1 SetBuffer BackBuffer() original=CreateImage(20,20) turr = CopyImage(original) Dim tur(4) ;RotateImage turr,-45 tur(0) = turr For i = 1 To 4 Cls turr=CopyImage(original) RotateImage turr, 90 tur(i) = CopyImage(turr) DrawImage tur(i),200,100 DebugLog ImageWidth(tur(i)) +" "+ImageWidth(tur(0)) DebugLog ImageHeight(tur(i))+" "+ImageHeight (tur(0)) DebugLog "_" Flip Next |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du drehst nur einmal. Bei dem leicht veränderten Code
Code: [AUSKLAPPEN] Graphics 800,600 AutoMidHandle 1 original=CreateImage(80,80) SetBuffer ImageBuffer(original) Text 10, 10, "HALLO" SetBuffer BackBuffer() turr = CopyImage(original) Dim tur(4) ;RotateImage turr,-45 tur(0) = turr ClsColor 0, 0, 200 Cls For i = 1 To 4 turr=CopyImage(original) RotateImage turr, 90 * i tur(i) = CopyImage(turr) DrawBlock tur(i), 200 + i * 90,100 DebugLog ImageWidth(tur(i)) +" "+ImageWidth(tur(0)) DebugLog ImageHeight(tur(i))+" "+ImageHeight (tur(0)) DebugLog "_" Flip Next WaitKey End erhalte ich folgendes Ergebnis. Code: [AUSKLAPPEN] 80 80
80 80 _ 82 80 82 80 _ 80 80 80 80 _ 82 80 82 80 _ In meinem Code benutze ich kein Midhandle, also kanns daran nicht liegen... Egal, dann muss ich die Bilder halt vorher mit nem Bildbearbeitungsprogramm drehen *doof* |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Liegt mit Sicherheit daran das das Bild über den Mittelpunkt berechnet wird.
Ich habe mal eine Function geschrieben mit SpeedTest, die Bilder dreht wegen der Geschwindigkeit bei 90,180 und 270 Grad Code: [AUSKLAPPEN] Graphics 800,600,0,2
TFormFilter 1 ;Bild erstellen original=CreateImage(180,80) SetBuffer ImageBuffer(original) Color 0,0,$0000FF : Rect 10,10,160,60,1 Color 0,0,$ffffff Text 20, 10, "HALLO Neus Bild" Line 0,0,80,80 ;;Bild erstellen ENDE ;;Speedtest ####################### Dummy= CopyImage(Original) time = MilliSecs() For t= 1 To 10 RotateImage Dummy ,180 Next Print MilliSecs()- time + " Millisek 10x Bild Drehen mit Rotate" time = MilliSecs() For t= 1 To 10 RotateImageRectenWinkel(dummy,270) Next Print MilliSecs()- time +" Millisek 10x Bild Drehen mit Neuer Function" Print " Hit Key " WaitKey ;Speedtest ENDE ####################### SetBuffer BackBuffer() ClsColor 0, 0,$008040 Cls DrawBlock original ,100,100 Image180 = RotateImageRectenWinkel(original,180) Image270 = RotateImageRectenWinkel(original,270) Image90 = RotateImageRectenWinkel(original, 90) DrawBlock Image180 ,100,200 DrawBlock Image270,10,100 DrawBlock Image90 ,290,100 Flip WaitKey End Function RotateImageRectenWinkel(img%,Grad%) ; Local imgX%,imgY%,KopieIMG%,x1%,y1% ; imgX = ImageWidth (img) -1 imgY = ImageHeight(img) -1 LockBuffer ImageBuffer (img) ; Select Grad Case 90 KopieIMG = CreateImage(ImageHeight(img),ImageWidth(img)); LockBuffer ImageBuffer (KopieIMG) For y1=0 To imgY For x1=0 To imgX CopyPixelFast x1,y1,ImageBuffer(IMG) , imgy-y1 ,x1,ImageBuffer(KopieIMG);90 Next Next ; Case 180 KopieIMG= CreateImage(ImageWidth(img),ImageHeight(img)) LockBuffer ImageBuffer (KopieIMG) For y1=0 To imgY For x1=0 To imgX CopyPixelFast x1,y1,ImageBuffer(IMG) , imgX-x1 , imgY - y1,ImageBuffer(KopieIMG);90 Next Next ; Case 270 KopieIMG= CreateImage(ImageHeight(img),ImageWidth(img)); LockBuffer ImageBuffer (KopieIMG) For y1=0 To imgY For x1=0 To imgX CopyPixelFast x1,y1,ImageBuffer(IMG) , y1 ,imgX-x1,ImageBuffer(KopieIMG);90 Next Next ; Default;standart mit rotateimage KopieIMG= CopyImage (img) LockBuffer ImageBuffer (KopieIMG) RotateImage KopieIMG,Grad End Select ; UnlockBuffer ImageBuffer (img) UnlockBuffer ImageBuffer (KopieIMG) ; Return KopieIMG ; End Function Da bleiben die Bilder auch immer gleich groß! |
||
[BB2D | BB3D | BB+]
|
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Joa, so hätt ichs wahrscheinlich auch gemacht, hätt ich für den BCC noch genug Bytes übrig...
Da es aber eh nur 4 Umdrehungen sind, werde ich das wohl vorher ins Bild zeichnen. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann mach das doch mit
Code: [AUSKLAPPEN] Resizeimage img,80,80 ; |
||
[BB2D | BB3D | BB+]
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group