Avatar billede stigc Nybegynder
25. juni 2002 - 20:49 Der er 15 kommentarer og
5 løsninger

TwipsPerPixel

Dim pic As Picture
Set pic = LoadPicture(strFilename)
msgbox pic.Height / Screen.TwipsPerPixelY


Giver mig ikke billedets højde! Hvordan får jeg den i pixels?

Den giver 846 mens billedt er 480 højt

Avatar billede vb_underviser Nybegynder
25. juni 2002 - 22:18 #1
lave et billede på pixel x pixel og så kan du god regne resten ud.
Avatar billede ocp Nybegynder
25. juni 2002 - 22:21 #2
Det er jo Twips Pr. Pixel, så det må være:

pic.height * screen.twipsperpixely
Avatar billede stigc Nybegynder
25. juni 2002 - 22:23 #3
pic.Height giver mig ikke pixels. Flere tusinde når billedet er 480 højt


Jeg øsnker at får højden i pixels.
Avatar billede ocp Nybegynder
25. juni 2002 - 22:28 #4
Ups... så prøver vi med "ren" matematik:

(1 / Screen.twipsperpixely) * pic.height

Idet (1 / Screen.twipsperpixely) giver "PixelsPerTwipY".
Avatar billede stigc Nybegynder
25. juni 2002 - 22:35 #5
"Ren matematik" :)
Det er fuldstændig det samme.

pic.Height / Screen.TwipsPerPixelY =
(1 / Screen.twipsperpixely) * pic.height

Prøv at gange med "Screen.TwipsPerPixelY"
Avatar billede johs_j Novice
25. juni 2002 - 22:36 #6
Sørg for at formens og pictuerboxens ScaleMode er sat til PIXEL.
Så skulle du få de rette værdier.
Avatar billede stigc Nybegynder
25. juni 2002 - 22:42 #7
Det gør de allerede...
Avatar billede johs_j Novice
25. juni 2002 - 22:48 #8
Prøv:
msgbox pic.Height / Screen.PixelY
i stdet for:
msgbox pic.Height / Screen.TwipsPerPixelY
Avatar billede stigc Nybegynder
25. juni 2002 - 22:54 #9
Screen.PixelY kender den ikke...
Avatar billede sjh Nybegynder
25. juni 2002 - 23:16 #10
Prøv at bruge lidt API ;-)


Private Type BITMAP
    bmType As Long
    bmWidth As Long
    bmHeight As Long
    bmWidthBytes As Long
    bmPlanes As Integer
    bmBitsPixel As Integer
    bmBits As Long
End Type

Private Declare Function GetObjectAPI Lib "gdi32" Alias "GetObjectA" ( _
                          ByVal hObject As Long, _
                          ByVal nCount As Long, _
                          lpObject As Any) As Long

Private Sub Form_Load()
Dim pic As Picture
Dim bmp As BITMAP
Dim strFilename As String

strFilename = "C:\billede.jpg"
Set pic = LoadPicture(strFilename)
  If GetObjectAPI(pic, Len(bmp), bmp) Then
    MsgBox "Width: " & bmp.bmWidth & " - Height: " & bmp.bmHeight
  End If
End Sub
Avatar billede stigc Nybegynder
25. juni 2002 - 23:20 #11
hmmmmm....
Jeg ville egentlig heller forstå hvor den fejler.
Kun i sidste ende vil jeg bruge det API kald.
Avatar billede sjh Nybegynder
25. juni 2002 - 23:28 #12
set en PictureBox på din Form1 med navn "pic" og prøv

Private Sub Form_Load()
Dim strFilename As String
strFilename = "C:\billede.jpg"

pic.BorderStyle = 0
Set pic = LoadPicture(strFilename)

MsgBox pic.Height / Screen.TwipsPerPixelY
End Sub
Avatar billede stigc Nybegynder
25. juni 2002 - 23:32 #13
Jeg skal kunne burge det uden en picture box.

Jeg bruger bare

Dim pic As Picture
Set pic = LoadPicture(strFilename)
msgbox pic.Height / Screen.TwipsPerPixelY
Avatar billede sjh Nybegynder
25. juni 2002 - 23:45 #14
Hvad er så problemet med API, hvis du ikke skal bruge en picturebox
Avatar billede ulrina Nybegynder
26. juni 2002 - 00:38 #15
Del resultatet med 1440.

1440 Twips = 1 pixel
Avatar billede tjacob Juniormester
26. juni 2002 - 12:47 #16
Det er helt forkert ulrina. TwipsPerPixel er forskellig fra skærm til skærm, men på 95 % af alle skærme er 15 twips = 1 pixel.
Avatar billede tjacob Juniormester
26. juni 2002 - 12:54 #17
stigc>> Det kan måske have noget med billedformatet at gøre?
Hvis dit billede ikke er et BMP, så prøv at konvertere det, og se om ikke det hjælper. Fejlen kan være på grund af at VB ikke kan læse billedets størrelse, hvis det er et "underligt" format.
Jeg har været ude for visse jpg'er som gav de samme problemer.
Avatar billede stigc Nybegynder
26. juni 2002 - 19:02 #18
sjh >> Fordi jeg heller vil forstå hvorfor flg. ikke virker.

Dim pic As Picture
Set pic = LoadPicture(strFilename)
msgbox pic.Height / Screen.TwipsPerPixelY
Avatar billede stigc Nybegynder
26. juni 2002 - 19:13 #19
tjacob >> Jeg tror ikke det er grunden. Det virker heller ikke ved BMP billeder

Private Sub Command1_Click()
    Dim pic As Picture
    Set pic = LoadPicture(App.Path & "\test.bmp")
    MsgBox Screen.TwipsPerPixelY
    MsgBox pic.Height / Screen.TwipsPerPixelY
    Image1.Picture = pic
    MsgBox Image1.Width / Screen.TwipsPerPixelY

End Sub


Det sjove er hvis jeg sætte et image.picture = pic, så er dens brede magen til breden på BMP billedet.

Mit "picture" objekt er selvfølgelig ikke noget der vises på skærmen, så det kan være man ikke kan bruge "Screen.TwipsPerPixelY". Forbindelsen mellem skærmen og billedet findes jo ikke.
Avatar billede stigc Nybegynder
26. juni 2002 - 19:16 #20
faktisk skal jeg dele med 26.45 for at finde højden. Hvilket andre også har fundet ud af:

http://groups.google.com/groups?q=%2226.45%22+vb&hl=da&lr=&ie=UTF-8&newwindow=1&selm=uPYMMQ95%23GA.242%40cppssbbsa05&rnum=2

men hvorfor, og ændre det sig ved andre computere?
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