Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Размер картинки в милиметрах Добавлено: 16.06.05 08:26  

Автор вопроса:  Diz | Web-сайт: www.TS-Group.fatal.ru

Ответить

  Ответы Всего ответов: 28  

Номер ответа: 16
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #16
Добавлено: 16.06.05 15:19
Кажись Twip=1/1440 Дюйма. а Дюйм=254 миллиметра

Ответить

Номер ответа: 17
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #17 Добавлено: 16.06.05 15:27
2Diz
1. Твой способ сильно хуже, потому что он не показывает размер картинки. Он показывает размер рабочей области самого PictureBox'а, он никак к картинке не привязан.
2. Это не статейка а выдержка из MSDN
Чтоб было понятней - кину код

Option Explicit
Private Type BITMAPFILEHEADER
      bfType As Integer
      bfSize As Long
      bfReserved1 As Integer
      bfReserved2 As Integer
      bfOffBits As Long
End Type
Private Type BITMAPINFOHEADER
    biSize As Long
    biWidth As Long
    biHeight As Long
    biPlanes As Integer
    biBitCount As Integer
    biCompression As Long
    biSizeImage As Long
    biXPelsPerMeter As Long
    biYPelsPerMeter As Long
    biClrUsed As Long
    biClrImportant As Long
End Type

Private Sub Form_Load()
Dim bfh As BITMAPFILEHEADER
Dim bih As BITMAPINFOHEADER
Dim hFile As Byte
bfh.bfSize = Len(bfh)
bih.biSize = Len(bih)
hFile = FreeFile
Open ";D:\Disk\PhotoShop.7_0\Setup.bmp" For Binary As hFile
Get hFile, , bfh
Get hFile, , bih
Close hFile
MsgBox CLng(bih.biXPelsPerMeter / 1000 * 25.4) & " x " & CLng(bih.biYPelsPerMeter / 1000 * 25.4)End Sub

Для jpg и прочих форматов могут различаться заголовки, узнать их формат можно в инете.

2Morpheus
Дюйм - 25,4 миллиметра :)

Ответить

Номер ответа: 18
Автор ответа:
 Diz



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #18
Добавлено: 16.06.05 15:35
При твоём примере у меня размеры получаются
475 X 319

Хотя должно быть
152 Х 102

А в моём случае размеры точно встают...

Вот как у меня твой выглядит

    XS = frmShowPicture.Original.ScaleX(frmShowPicture.Original.Picture.Width, vbHimetric, vbMillimeters)
    YS = frmShowPicture.Original.ScaleY(frmShowPicture.Original.Picture.Height, vbHimetric, vbMillimeters)

Ответить

Номер ответа: 19
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #19 Добавлено: 16.06.05 15:43
152 Х 102 чего? Откуда эти цифры? Если своим методом получил - забей. Открой файл картинки графическим редактором и посмотри её оригинальные размеры в миллиметрах.
Если та же история - код + файл картинки в студию.

Ответить

Номер ответа: 20
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #20 Добавлено: 16.06.05 15:46
Может у тебя картинка по размеру контрола масштабируется? Ты случаем не Image ли контрол со Stretch=True используешь? :)

Ответить

Номер ответа: 21
Автор ответа:
 Diz



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #21
Добавлено: 16.06.05 15:48

НЕт у меня PictureBox со свойством AutoSize=true

Ответить

Номер ответа: 22
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #22 Добавлено: 16.06.05 15:49
Не, у Image нет методов Scale. Ну, в любом случае, лучше привести код с файлом. Какая-то у тебя мистика творится...

Ответить

Номер ответа: 23
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #23 Добавлено: 16.06.05 15:52
Вот блин! Дык сразу бы сказал про AutoSize. Я ж тебе про этот случай написал в 9 посте!
Но еще раз говорю - отрой картинку другой прогой и посмотри её размер в миллиметрах.

Ответить

Номер ответа: 24
Автор ответа:
 Diz



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #24
Добавлено: 16.06.05 16:03
Ну так они и есть 152 Х 102 мм

Ответить

Номер ответа: 25
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #25 Добавлено: 16.06.05 16:08
Ну тогда не знаю, значит оттого что у нас часовые пояса разные :)
У меня даже такой код при AutoSize=True

Picture1.ScaleMode = 6
MsgBox Picture1.ScaleX(Picture1.Picture.Width, vbHimetric, vbMillimeters)
MsgBox Picture1.ScaleWidth

выдает одинаковые результаты. Не знаю как у тебя получается сделать иначе...

Ответить

Номер ответа: 26
Автор ответа:
 Diz



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #26
Добавлено: 16.06.05 16:30

в фотошопе я кадрирую файл под 102 X 152 мм

А потом проверяю своим методом... получается верно.
Такпроверял с разными размерами. Вот мне и интересно, это просто совпадение или его можно использовать

Ответить

Номер ответа: 27
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #27 Добавлено: 16.06.05 17:09
ты про деление на 3,125? А ScaleMode у тебя какой стоит?
Вообще вопрос не в том почему у тебя верно - ответ мы узнали (AutoSize), вопрос - почему мой метод у тебя глючит. Парадокс какой-то...

Ответить

Номер ответа: 28
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #28 Добавлено: 16.06.05 17:19
Ладно, есть еще вариант, относится к коду уз 17 поста. В конец добавить строчку

MsgBox CLng(bih.biWidth / bih.biXPelsPerMeter * 1000) & "x" & CLng(bih.biHeight / bih.biYPelsPerMeter * 1000)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам