Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: Как узнать размер изображения? Добавлено: 20.05.07 18:24  

Автор вопроса:  Arvitaly | Web-сайт: okazani.ru | ICQ: 301746136 
Как узнать размер изображения 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 структуру
Private Type BITMAP '14 bytes
   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-сайт: okazani.ru
 Профиль | | #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
loadpicture'ешь в него картинку.

А если рисунки по 10-20Мб?

Всетаки лучше бинарное чтение заголовка файла.

Ответить

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



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #8 Добавлено: 22.05.07 13:04
А если рисунки по 10-20Мб?

Всетаки лучше бинарное чтение заголовка файла.
Ты где такие видел?

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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
Описание формата BMP для Window 3.0 (DIB)
    =========================================
    Основным отличием файлов нового формата (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 все намного сложнее
JPEG/JFIF формат файла:

• заголовок (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 обычно неподдерживаемый
    ...
    ;DHT = $c4 Определение Таблицы Хаффмана, относительно деталей смотрите ниже
    JPG = $c8 неопределенный/зарезервированный (вызывает ошибки декодирования)
    ;DAC = $cc Определение Арифметической Таблицы, обычно не поддерживается
   *RST0 = $d0 RSTn используются для синхронизации, может быть проигнорировано
    ...
   *RST7 = $d7
    SOI = $d8 Начало Изображения
    EOI = $d9 Конец Изображения
    SOS = $da Начало Сканирования, относительно деталей смотрите ниже
    ;DQT = $db Определение Таблицы Квантования, относительно деталей смотрите ниже
    ;DNL = $dc обычно неподдерживаемый, игнорировать
    ;DRI = $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-сайт: okazani.ru
 Профиль | | #15
Добавлено: 23.05.07 11:43
Если можешь вышли пожалуйста про JPG/JPEG на nagl16@mail.ru

Ответить

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

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



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