Страница: 1 | 2 |
Вопрос: Как узнать размер изображения?
Добавлено: 20.05.07 18:24
Автор вопроса: Arvitaly | Web-сайт:
Как узнать размер изображения JPG GIF на visual Basic 6 with win api 32
Ответы
Всего ответов: 20
Номер ответа: 1
Автор ответа:
Леша
ICQ: 362231326
Вопросов: 9
Ответов: 76
Профиль | | #1
Добавлено: 20.05.07 19:52
А обязательно через апи? посмотрите эти примеры
http://vbzero.narod.ru/downloadsArt/infoGIF.zip
http://vbzero.narod.ru/chapter3/downloads/infoJFIF.zip
Номер ответа: 2
Автор ответа:
Леша
ICQ: 362231326
Вопросов: 9
Ответов: 76
Профиль | | #2
Добавлено: 20.05.07 20:09
а тут можно почитать, может подойдет
http://vbzero.narod.ru/chapter3/article_4.htm
http://vbzero.narod.ru/chapter3/article_3.htm
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 20.05.07 23:46
Создаешь StdPicture, грузиш в него картинку, потом через GetObjectAPI, вынимаешь из твоей StdPicture структуру
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
ну а далее смотришь соответственно bmHeight/bmWidth
Номер ответа: 4
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #4
Добавлено: 21.05.07 11:24
А нельзя без предварительной подгрузки?
Номер ответа: 5
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #5
Добавлено: 21.05.07 12:14
Можно бинарно читать только заголовок файла, в нем вся инфа записана.
Для каждого формата заголовки разные.
Я раньше такое делал с BMP. Сейсас долго вспоминать.
Короче, поищи инфу о форматах файлов. Ее всю читать не прийдется. Только про описание заголовков.
Номер ответа: 6
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #6
Добавлено: 21.05.07 14:37
опять паритесь) со своими API. зачем?
созидлаешь ниведимый (если надо - видимый) picturebox.
loadpicture'ешь в него картинку.
далее
ширина = picturebox1.picture.width
высота = picturebox1.picture.height
если не нравятся твипы, то подели на 15 или на Screen.TwipsPerPixel[X/Y]
Номер ответа: 7
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #7
Добавлено: 21.05.07 15:15
А если рисунки по 10-20Мб?
Всетаки лучше бинарное чтение заголовка файла.
Номер ответа: 8
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #8
Добавлено: 22.05.07 13:04
Всетаки лучше бинарное чтение заголовка файла.
Номер ответа: 9
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #9
Добавлено: 22.05.07 13:21
У себя в фотоаппарате. В папке с картами.
Номер ответа: 10
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #10
Добавлено: 22.05.07 14:32
Да. В цифровике файлы по 3-5Мб. Если их штук 100, то будет тупить прога сильно.
Нет у меня сейчас возможности (даже нет простейшего HEX-редактора).
Скажу лишь что инфа о размерах рисунка хранится в файлах по 4 байта на дину и 4 байта на высоту. Там же рядом инфа о количестве бит и т.п.
Кстати, помоему у кажого типа рисунков инфа о размерах хранится с одинаковым смещением (т.е. в одном и том же месте)
Номер ответа: 11
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #11
Добавлено: 22.05.07 16:56
Сканировал фотку для плаката, 4800 dpi, ~ 20000x20000px, ~ 350 МБ (JPG)
Номер ответа: 12
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #12
Добавлено: 22.05.07 20:03
Для BMP
=========================================
Основным отличием файлов нового формата (DIB) - Device
Independent Bitmap (аппаратно-независимый битовый образ) является
то, что в них используется кодировка цветов с одной битовой плос-
костью.
Файлы битовых образов нового формата начинаются со структуры
BITMAPFILEHEADER:
typedef struct tagBITMAPFILEHEADER {
word bfType; //тип файла (для битового образа - BM)
dword bfSize; //размер файла в dword
word bfReserved1; //не используется
word bfReserved2; //не используется
dword bfOffbits; //смещение данных битового образа от
//заголовка в байтах
}
Непосредственно за ней располагается структура BITMAPINFO, со-
держащая всю информацию о битовом образе. Она делится на две час-
ти: структуру BITMAPINFOHEADER, описывающей размеры и цветовой
формат битового образа, и массив структур RGBQUAD, определяющей
цветовую палитру:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
}
typedef struct tagBITMAPINFOHEADER {
dword biSize; //число байт, занимаемых структурой
//BITMAPINFOHEADER
dword biWidth; //ширина битового образа в пикселах
dword biHeight; //высота битового образа в пикселах
word biPlanes; //число битовых плоскостей устройства
word biBitCount; //число битов на пиксель
dword biCompression; //тип сжатия
dword biSizeImage; //размер картинки в байтах
dword biXPelsPerMeter;//горизонтальное разрешение устройства,
//пиксел/м
dword biYPelPerMeter; //вертикальное разрешение устройства,
//пиксел/м
dword biClrUsed; //число используемых цветов
dword biClrImportant; //число "важных" цветов
} BITMAPINFOHEADER;
Тебе надо просто получить значеине biWidth (offset:0x12h ) и biHeight (offset:0x16)
Номер ответа: 13
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #13
Добавлено: 22.05.07 20:11
Для GIF еще проще.
Width - offset: 0x06h тип INTEGER (2 байта)
Height - offset: 0x08h тип INTEGER (2 байта)
Для JPEG все намного сложнее
• заголовок (2 байта): $ff, $d8 (SOI) (эти два идентифицируют JPEG/JFIF файл)
• для JFIF файлов, сегмент APP0 немедленно следует за маркером SOI, смотрите ниже
• любое число "сегментов" (подобно IFF (Image File Format) кускам), смотрите ниже
• хвостовик (2 байта): $ff, $d9 (EOI)
Формат сегмента:
• заголовок (4 байта):
$ff идентифицирует сегмент
n тип сегмента (один байт)
sh, sl размер сегмента, включая эти два байта, но не включая $ff и байт типа. Примечание, не порядок Intel: сначала старший байт, затем младший байт!
• содержимое сегмента, максимум 65533 байта.
Примечания:
• Есть сегменты без параметров (обозначенные '*'), которые не имеет спецификацию размера (и никакого содержания), просто $ff и байт типа.
• Любое число $ff байтов между сегментами легальное и должно быть пропущено.
Типы сегментов:
*TEM = $01 обычно вызывает ошибки декодирования, может быть проигнорировано
SOF0 = $c0 Начало Кадра (Baseline JPEG), относительно деталей смотрите ниже
SOF1 = $c1 dito
SOF2 = $c2 обычно неподдерживаемый
...
SOF9 = $c9 для арифметического кодирования, обычно не поддерживается
SOF10 = $ca обычно неподдерживаемый
...
 HT = $c4 Определение Таблицы Хаффмана, относительно деталей смотрите ниже
JPG = $c8 неопределенный/зарезервированный (вызывает ошибки декодирования)
 AC = $cc Определение Арифметической Таблицы, обычно не поддерживается
*RST0 = $d0 RSTn используются для синхронизации, может быть проигнорировано
...
*RST7 = $d7
SOI = $d8 Начало Изображения
EOI = $d9 Конец Изображения
SOS = $da Начало Сканирования, относительно деталей смотрите ниже
 QT = $db Определение Таблицы Квантования, относительно деталей смотрите ниже
 NL = $dc обычно неподдерживаемый, игнорировать
 RI = $dd Определение Интервала Перезапуска, относительно деталей смотрите ниже
APP0 = $e0 JFIF маркеры сегментов приложения, относительно деталей смотрите ниже
APP15 = $ef игнорировать
COM = $fe Комментарий, относительно деталей смотрите ниже
Все другие типы сегментов резервируются и должны быть проигнорированы (пропущены).
SOF0: Начало Кадра 0:
• $ff, $c0 (SOF0)
• длина (старший байт, младший байт), 8+components*3
• точность данных (1 байт) в битах/единицу, обычно 8 (12 и 16 не поддерживается большин-ством программного обеспечения)
• высота изображения (2 байта, High-Low), должно быть >0, если DNL не поддерживается
• ширина изображения (2 байта, High-Low), должно быть >0, если DNL не поддерживается
• количество компонентов (1 байт), обычно 1 = черно-белый, 3 = цвет YCbCr или YIQ, 4 = цвет CMYK)
• для каждого компонента: 3 байта
? идентификатор компонента (1 = Y, 2 = Cb, 3 = Cr, 4 = I, 5 = Q)
? показатели дискретизации (бит 0-3 вертикальной, 4-7 горизонтальной)
? номер таблицы квантования
Номер ответа: 14
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #14
Добавлено: 22.05.07 20:21
Автор, если надо - могу выслать подробнее о форматах файлов. В основном на русском. Говори только какие надо форматы. У меня по ним 25Мб.
Номер ответа: 15
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #15
Добавлено: 23.05.07 11:43
Если можешь вышли пожалуйста про JPG/JPEG на nagl16@mail.ru