Avatar billede hitman3k Nybegynder
12. oktober 2009 - 18:03 Der er 2 kommentarer og
1 løsning

Hvorfor overflow?

Hej alle.

Jeg kan ikke forstå at jeg får overflow.

Koden ser sådan ud:

Const SRCCOPY = &HCC0020
              Const Pi = 3.14159265359
              Private Declare Function SetPixel Lib "GDI32" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal crColor As Long) As Long
              Private Declare Function GetPixel Lib "GDI32" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer) As Long
              Private Declare Function StretchBlt% Lib "GDI32" (ByVal hDC%, ByVal X%, ByVal Y%, ByVal nWidth%, ByVal nHeight%, ByVal hSrcDC%, ByVal XSrc%, ByVal YSrc%, ByVal nSrcWidth%, ByVal nSrcHeight%, ByVal dwRop&)

Private Sub Command4_Click()
Me.Picture1 = LoadPicture("D:\Nyt Program\test\DSC00293.JPG")
Me.Picture1.AutoSize = True
Me.Picture1.AutoRedraw = True
End Sub

              Sub Form_Load()
                Picture1.ScaleMode = 3
                Picture2.ScaleMode = 3
              End Sub


              Sub Command1_Click()
              'flip horizontal
                Picture2.Cls
                px% = Picture1.ScaleWidth
                py% = Picture1.ScaleHeight
                retval% = StretchBlt(Picture2.hDC, px%, 0, -px%, py%, Picture1.hDC, 0, 0, px%, py%, SRCCOPY)
              End Sub


              Sub Command2_Click()
                            'flip vertical
                Picture2.Cls
                px% = Picture1.ScaleWidth
                py% = Picture1.ScaleHeight
                retval% = StretchBlt(Picture2.hDC, 0, py%, px%, -py%, Picture1.hDC, 0, 0, px%, py%, SRCCOPY)
              End Sub

              Sub Command3_Click()
                'rotate 45 degrees
                Picture2.Cls
                Call bmp_rotate(Picture1, Picture2, 3.14 / 4)
              End Sub


              Sub bmp_rotate(pic1 As PictureBox, pic2 As PictureBox, ByVal theta!)
                ' bmp_rotate(pic1, pic2, theta)
                ' Rotate the image in a picture box.
                '  pic1 is the picture box with the bitmap to rotate
                '  pic2 is the picture box to receive the rotated bitmap
                '  theta is the angle of rotation
                Dim c1x As Integer, c1y As Integer
                Dim c2x As Integer, c2y As Integer
                Dim a As Single
                Dim p1x As Integer, p1y As Integer
                Dim p2x As Integer, p2y As Integer
                Dim n As Integer, r  As Integer

                c1x = pic1.ScaleWidth \ 2
                c1y = pic1.ScaleHeight \ 2
                c2x = pic2.ScaleWidth \ 2
                c2y = pic2.ScaleHeight \ 2

                If c2x < c2y Then n = c2y Else n = c2x
                n = n - 1
                pic1hDC% = pic1.hDC
                pic2hDC% = pic2.hDC

                For p2x = 0 To n
                  For p2y = 0 To n
                    If p2x = 0 Then a = Pi / 2 Else a = Atn(p2y / p2x)
                    r = Sqr(1& * p2x * p2x + 1& * p2y * p2y)
                    p1x = r * Cos(a + theta!)
                    p1y = r * Sin(a + theta!)
                    c0& = GetPixel(pic1hDC%, c1x + p1x, c1y + p1y)
                    c1& = GetPixel(pic1hDC%, c1x - p1x, c1y - p1y)
                    c2& = GetPixel(pic1hDC%, c1x + p1y, c1y - p1x)
                    c3& = GetPixel(pic1hDC%, c1x - p1y, c1y + p1x)
                    If c0& <> -1 Then xret& = SetPixel(pic2hDC%, c2x + p2x, c2y + p2y, c0&)
                    If c1& <> -1 Then xret& = SetPixel(pic2hDC%, c2x - p2x, c2y - p2y, c1&)
                    If c2& <> -1 Then xret& = SetPixel(pic2hDC%, c2x + p2y, c2y - p2x, c2&)
                    If c3& <> -1 Then xret& = SetPixel(pic2hDC%, c2x - p2y, c2y + p2x, c3&)
                  Next
                  t% = DoEvents()
                Next
End Sub

Hvis jeg fx trykker på Komandoknap2 så får jeg overflow ved denne linje:
                retval% = StretchBlt(Picture2.hDC, 0, py%, px%, -py%, Picture1.hDC, 0, 0, px%, py%, SRCCOPY)


Og hvis jeg trykker på Komandoknap1:
                retval% = StretchBlt(Picture2.hDC, px%, 0, -px%, py%, Picture1.hDC, 0, 0, px%, py%, SRCCOPY)

Komandokanp3 Fejl:
                pic1hDC% = pic1.hDC

Nogen som har en ide til hva der sker.

skal lige siges at det kode har jeg fundet på nettet.

På forhånd Tak.
Avatar billede tjacob Juniormester
12. oktober 2009 - 18:31 #1
Umiddelbart ser det OK ud.
Men prøv følgende:

Fjern alle %-tegn i erklæringen af StretchBlt (og efterfølgende i koden) og &-tegnet på dWRop.
Lav alle erklærede integers om til Long, også i funktionserklæringerne.
Avatar billede hitman3k Nybegynder
12. oktober 2009 - 21:09 #2
Jeg har fået den til at rotere billeder. men de andre ting virker ikke. men det var os kun det rotering jeg skal bruge..

Smid et svar..
Avatar billede tjacob Juniormester
13. oktober 2009 - 11:36 #3
OK, -svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester