Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

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

Автор вопроса:  Diz | Web-сайт: www.TS-Group.fatal.ru
У меня в PictureBox есть картинка, как мне узнать ширину и высоту этой картинки в милиметрах, а также её разрешение в dpi/inch

Ответить

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

Номер ответа: 1
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #1 Добавлено: 16.06.05 11:08
Узнать размеры:
Picture1.ScaleMode = 6
x = Picture1.ScaleWidth
y = x = Picture1.ScaleHeight

А разрешение, вообще говоря, в dpi/inch [(dot per inch)/inch или dot/inch^2, точек на квадратный дюйм] обычно не измеряется.

Ответить

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



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #2
Добавлено: 16.06.05 11:45
Чего-то я не понял... Как разрешение узнать?

Ответить

Номер ответа: 3
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #3 Добавлено: 16.06.05 11:54
Можно вот так попробовать:
Picture1.ScaleMode = 3
pix = Picture1.ScaleWidth
Picture1.ScaleMode = 5
inch = Picture1.ScaleWidth
MsgBox = pix / inch

Но, боюсь, разрешение всегда будет равным разрешению экрана.
Если нужно узнать разрешение, которое прописывают в картинку программы, то нужно копать в сторону файлов, а не PictureBox. Насколько я понимаю, при отрисовке в PictureBox дополнительная информация о картинке теряется.

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #4 Добавлено: 16.06.05 13:05
Для размера:

Dim x As Single
Dim y As Single
x = Picture1.ScaleX(Picture1.Picture.Width, vbTwips, vbMillimeters)
x = Picture1.ScaleY(Picture1.Picture.Height, vbTwips, vbMillimeters)

Разрешение смотри в заголовке файла, из PictureBox ты его не вытянешь. Кстати, его и в файле тоже может не быть, т.к. это вешь не обязательная и зависит от устройсва. Разршение dpi записывается, например, при сканировании картинки. Если ты сам её накидал в Paint'е - как о нем можно говорить :)
P.S. dpi/inch - абсурд, dpi есть dot per inch :)

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #5 Добавлено: 16.06.05 13:08
Пардон, конечно вместо vbTwips нужно использовать константу vbHimetric. Независимо от ScaleMode PictureBox'а.

Ответить

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



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #6
Добавлено: 16.06.05 13:08
Ну хорошо, а если фото с фотоаппарата???
Ведь Photoshop откуда-то берёт его? в смысле разрешение...
Или если я картинку отконвертил в фотожопе и сохранил в JPG... фотошоп видит разрешение при открытии... а как мне его увидеть?

Ответить

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



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #7
Добавлено: 16.06.05 13:14
И кстати милиметры я высчитывал вот так:

XS = frmShowPicture.Original.ScaleWidth / 3.125
YS = frmShowPicture.Original.ScaleHeight / 3.125

Предыдущий код покчмуто неверные цифры показывает!

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #8 Добавлено: 16.06.05 14:23
Если ты про ответ N4 - я уже отписал в пятом посте что ошибся константой.
А фотошоп берет разрешение из заголовка самого файла. Если у тебя картинка уже в PictureBox - оттуда не вытащить, как не крути.

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 16.06.05 14:30
Еще хочу заметить - ScaleHeight совпадает с размером картинки только в одном случае - если PictureBox подгоняется под размеры картинки. Иначе они в принципе разные величины. Размер картинки - не свойства Picture, а свойства Picture.Picture

Ответить

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



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

4 пример с 5 поправкой даёт неверные размеры. А где можно узнать про разрешение?

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 16.06.05 14:50
Ерунда. Все должно работать корректно. С чем сравнивал?

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 16.06.05 14:53
Для разрешения - говорят тебе, из заголовка файла. В нем есть структуры, описывающие свойства. Зависит от формата (jpg, bmp и т.п.). К примеру, для bmp

  
  Windows GDI
BITMAPINFOHEADER
The BITMAPINFOHEADER structure contains information about the dimensions and color format of a DIB.

Windows 95, Windows NT 4.0: Applications can use the BITMAPV4HEADER structure for added functionality.

Windows 98/Me, Windows 2000/XP: Applications can use the BITMAPV5HEADER structure for added functionality. However, these are used only in the CreateDIBitmap function.

typedef struct tagBITMAPINFOHEADER{
  ;DWORD biSize;
  LONG biWidth;
  LONG biHeight;
  WORD biPlanes;
  WORD biBitCount;
  ;DWORD biCompression;
  ;DWORD biSizeImage;
  LONG biXPelsPerMeter;
  LONG biYPelsPerMeter;
  ;DWORD biClrUsed;
  ;DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
Members
biSize
Specifies the number of bytes required by the structure.
biWidth
Specifies the width of the bitmap, in pixels.
Windows 98/Me, Windows 2000/XP: If biCompression is BI_JPEG or BI_PNG, the biWidth member specifies the width of the decompressed JPEG or PNG image file, respectively.

biHeight
Specifies the height of the bitmap, in pixels. If biHeight is positive, the bitmap is a bottom-up DIB and its origin is the lower-left corner. If biHeight is negative, the bitmap is a top-down DIB and its origin is the upper-left corner.
If biHeight is negative, indicating a top-down DIB, biCompression must be either BI_RGB or BI_BITFIELDS. Top-down DIBs cannot be compressed.

Windows 98/Me, Windows 2000/XP: If biCompression is BI_JPEG or BI_PNG, the biHeight member specifies the height of the decompressed JPEG or PNG image file, respectively.

biPlanes
Specifies the number of planes for the target device. This value must be set to 1.
biBitCount
Specifies the number of bits-per-pixel. The biBitCount member of the BITMAPINFOHEADER structure determines the number of bits that define each pixel and the maximum number of colors in the bitmap. This member must be one of the following values. Value Meaning
0 Windows 98/Me, Windows 2000/XP: The number of bits-per-pixel is specified or is implied by the JPEG or PNG format.
1 The bitmap is monochrome, and the bmiColors member of BITMAPINFO contains two entries. Each bit in the bitmap array represents a pixel. If the bit is clear, the pixel is displayed with the color of the first entry in the bmiColors table; if the bit is set, the pixel has the color of the second entry in the table.
4 The bitmap has a maximum of 16 colors, and the bmiColors member of BITMAPINFO contains up to 16 entries. Each pixel in the bitmap is represented by a 4-bit index into the color table. For example, if the first byte in the bitmap is 0x1F, the byte represents two pixels. The first pixel contains the color in the second table entry, and the second pixel contains the color in the sixteenth table entry.
8 The bitmap has a maximum of 256 colors, and the bmiColors member of BITMAPINFO contains up to 256 entries. In this case, each byte in the array represents a single pixel.
16 The bitmap has a maximum of 2^16 colors. If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL. Each WORD in the bitmap array represents a single pixel. The relative intensities of red, green, and blue are represented with five bits for each color component. The value for blue is in the least significant five bits, followed by five bits each for green and red. The most significant bit is not used. The bmiColors color table is used for optimizing colors used on palette-based devices, and must contain the number of entries specified by the biClrUsed member of the BITMAPINFOHEADER.
If the biCompression member of the BITMAPINFOHEADER is BI_BITFIELDS, the bmiColors member contains three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. Each WORD in the bitmap array represents a single pixel.

Windows NT/Windows 2000/XP: When the biCompression member is BI_BITFIELDS, bits set in each DWORD mask must be contiguous and should not overlap the bits of another mask. All the bits in the pixel do not have to be used.

Windows 95/98/Me: When the biCompression member is BI_BITFIELDS, the system supports only the following 16bpp color masks: A 5-5-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x03E0, and the red mask is 0x7C00; and a 5-6-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x07E0, and the red mask is 0xF800.
 
24 The bitmap has a maximum of 2^24 colors, and the bmiColors member of BITMAPINFO is NULL. Each 3-byte triplet in the bitmap array represents the relative intensities of blue, green, and red, respectively, for a pixel. The bmiColors color table is used for optimizing colors used on palette-based devices, and must contain the number of entries specified by the biClrUsed member of the BITMAPINFOHEADER.
32 The bitmap has a maximum of 2^32 colors. If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL. Each DWORD in the bitmap array represents the relative intensities of blue, green, and red, respectively, for a pixel. The high byte in each DWORD is not used. The bmiColors color table is used for optimizing colors used on palette-based devices, and must contain the number of entries specified by the biClrUsed member of the BITMAPINFOHEADER.
If the biCompression member of the BITMAPINFOHEADER is BI_BITFIELDS, the bmiColors member contains three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. Each DWORD in the bitmap array represents a single pixel.

Windows NT/ 2000: When the biCompression member is BI_BITFIELDS, bits set in each DWORD mask must be contiguous and should not overlap the bits of another mask. All the bits in the pixel do not need to be used.

Windows 95/98/Me: When the biCompression member is BI_BITFIELDS, the system supports only the following 32-bpp color mask: The blue mask is 0x000000FF, the green mask is 0x0000FF00, and the red mask is 0x00FF0000.
 


biCompression
Specifies the type of compression for a compressed bottom-up bitmap (top-down DIBs cannot be compressed). This member can be one of the following values. Value Description
BI_RGB An uncompressed format.
BI_RLE8 A run-length encoded (RLE) format for bitmaps with 8 bpp. The compression format is a 2-byte format consisting of a count byte followed by a byte containing a color index. For more information, see Bitmap Compression.
BI_RLE4 An RLE format for bitmaps with 4 bpp. The compression format is a 2-byte format consisting of a count byte followed by two word-length color indexes. For more information, see Bitmap Compression.
BI_BITFIELDS Specifies that the bitmap is not compressed and that the color table consists of three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. This is valid when used with 16- and 32-bpp bitmaps.
BI_JPEG Windows 98/Me, Windows 2000/XP: Indicates that the image is a JPEG image.
BI_PNG Windows 98/Me, Windows 2000/XP: Indicates that the image is a PNG image.


biSizeImage
Specifies the size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps.
Windows 98/Me, Windows 2000/XP: If biCompression is BI_JPEG or BI_PNG, biSizeImage indicates the size of the JPEG or PNG image buffer, respectively.

biXPelsPerMeter
Specifies the horizontal resolution, in pixels-per-meter, of the target device for the bitmap. An application can use this value to select a bitmap from a resource group that best matches the characteristics of the current device.
biYPelsPerMeter
Specifies the vertical resolution, in pixels-per-meter, of the target device for the bitmap.
biClrUsed
Specifies the number of color indexes in the color table that are actually used by the bitmap. If this value is zero, the bitmap uses the maximum number of colors corresponding to the value of the biBitCount member for the compression mode specified by biCompression.
If biClrUsed is nonzero and the biBitCount member is less than 16, the biClrUsed member specifies the actual number of colors the graphics engine or device driver accesses. If biBitCount is 16 or greater, the biClrUsed member specifies the size of the color table used to optimize performance of the system color palettes. If biBitCount equals 16 or 32, the optimal color palette starts immediately following the three DWORD masks.

When the bitmap array immediately follows the BITMAPINFO structure, it is a packed bitmap. Packed bitmaps are referenced by a single pointer. Packed bitmaps require that the biClrUsed member must be either zero or the actual size of the color table.

biClrImportant
Specifies the number of color indexes that are required for displaying the bitmap. If this value is zero, all colors are required.
Remarks
The BITMAPINFO structure combines the BITMAPINFOHEADER structure and a color table to provide a complete definition of the dimensions and colors of a DIB. For more information about DIBs, see Device-Independent Bitmaps and BITMAPINFO.

An application should use the information stored in the biSize member to locate the color table in a BITMAPINFO structure, as follows:

pColor = ((LPSTR)pBitmapInfo + (WORD)(pBitmapInfo->bmiHeader.biSize));
Windows 98/Me, Windows 2000/XP: The BITMAPINFOHEADER structure is extended to allow a JPEG or PNG image to be passed as the source image to StretchDIBits.

Requirements
  Windows NT/2000/XP: Included in Windows NT 3.1 and later.
  Windows 95/98/Me: Included in Windows 95 and later.
  Header: Declared in Wingdi.h; include Windows.h.

See Also
Bitmaps Overview, Bitmap Structures, BITMAPINFO, BITMAPV4HEADER, BITMAPV5HEADER, CreateDIBitmap , StretchDIBits


--------------------------------------------------------------------------------

© 2004 Microsoft Corporation. All rights reserved.

Requirements
  Windows NT/2000/XP: Included in Windows NT 3.1 and later.
  Windows 95/98/Me: Included in Windows 95 and later.
  Header: Declared in Wingdi.h; include Windows.h.
See Also
Bitmaps Overview, Bitmap Structures, BITMAPINFO, BITMAPV4HEADER, BITMAPV5HEADER, CreateDIBitmap , StretchDIBits


--------------------------------------------------------------------------------

© 2004 Microsoft Corporation. All rights reserved.

Ответить

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



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #13 Добавлено: 16.06.05 15:02
Про код - специально щас его проверил. Показывает с точностью до 0,02 пикселя (погрешность преобразования). Для миллиметров сказть труднее - сравнивал с сантиметрами. При округлении до десятых совпало. Так что все корректно, ищи ошибку у себя.

Ответить

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



Вопросов: 24
Ответов: 38
 Web-сайт: www.TS-Group.fatal.ru
 Профиль | | #14
Добавлено: 16.06.05 15:05
мда, написано много, понятно мало... А может анналогичная статейка про jpeg у кого завалялась?

Ответить

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



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

А мой способ сильно хуже?

Ответить

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

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



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