Получите размеры JPEG в C++

Для базовых примеров, используя разделитель строк таблицы подсчета, такой как Джеффа Модена, или любую другую функцию разделения, которую вы хотите вместо DelimitedSplit8K() ниже, вы можете разделить их на пробелы, а затем собрать их обратно вместе после исправления правильного случая. Обратите внимание, что использование этого типа функции разделения быстрее, чем обычно встречающиеся методы RBAR (с циклом и т. Д.).

DEMO

declare @table table (v varchar(4000))
insert into @table
values
('abc abc abc'),
('Def abc ABC'),
('qrs ABC abc'),
('tuv'),
(' this is an odd-string# that3 has some 435 in it. It has leading and trailing spaces? ')

select distinct
    *
    ,STUFF((
          SELECT ' ' + upper(left(lower(rtrim(ltrim(x.Item))),1)) + right(lower(rtrim(ltrim(x.Item))),len(rtrim(ltrim(x.Item))) - 1)
          from @table t
          cross apply DelimitedSplit8K(rtrim(ltrim(v)),' ') x
          where t.v = b.v
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 
from @table b

5
задан Melebius 27 April 2017 в 08:25
поделиться

6 ответов

У Вас есть эта функция C, которая может извлечь соответствующие данные для Вас.

Это - стандартная программа C, но должно скомпилировать прекрасный с C++.
Передайте его нормальный указатель ФАЙЛА (от fopen) к началу jpeg файла и двух международных указателей, которые будут установлены с высотой изображения и шириной.

Или можно найти в библиотеке Boost jpeg класс, который имеет правильную функцию (От Adobe Универсальная библиотека изображений).

jpeg_read_dimensions

boost::gil::jpeg_read_dimensions (const char *filename)

Возвращает ширину и высоту файла JPEG в указанном местоположении. Станд. бросков:: ios_base:: отказ, если местоположение не соответствует допустимому файлу JPEG.

13
ответ дан 18 December 2019 в 07:32
поделиться

Возможно, libjpeg?

2
ответ дан 18 December 2019 в 07:32
поделиться

libjpeg является довольно маленьким, с открытым исходным кодом и доступным на OpenVMS. Это, вероятно, более быстро для установки его, чем обработать JPEG самостоятельно.

3
ответ дан 18 December 2019 в 07:32
поделиться

Необходимо смочь использовать этот jpeg lib с этим патчем для OpenVMS

1
ответ дан 18 December 2019 в 07:32
поделиться

Никакая потребность в полной libjpeg библиотеке только для получения этой информации (если Вы не должны делать что-то еще с изображениями). ImageInfo мог бы помочь Вам. Это - класс Java, но существуют порты для других языков, включая C++.
Как указано, Exif мог бы изменить их информация (например, с установкой ориентации).

1
ответ дан 18 December 2019 в 07:32
поделиться

Вы можете попробовать пробуть GDAL библиотеку , которая служит слоем абстракции для большого количества форматов растровых данных, в основном используется в геопространственных приложениях для GIS / RS.

GDAL предоставляет количество API для языков C, C ++ и сценариев. Конечно, он поддерживает jpeg изображения и его варианты, такие как jpeg2000 и многое другое.

Вот очень простой пример, как открыть образ JPEG и запрашивать его размеры:

#include <gdal_priv.h>

GDALAllRegister(); // call ones in your application

GDALDataset* ds = (GDALDataset*)GDALOpen("my.jpeg", GA_ReadOnly);
int width  = ds->GetRasterXSize();
int height = ds->GetRasterYSize(),
int nbands = ds->GetRasterCount();

Проверка Учебное пособие по API GDAL для более полного примера.

1
ответ дан 18 December 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: