Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Вниз

Определение разрешения картинок (jpg bmp gif)   Найти похожие ветки 

 
DS   (2005-04-06 14:34) [0]

Кто знает как определить разрешение картинок без создания объектов в памяти (TJpegImag TBitmap)


 
Nes ©   (2005-04-06 15:22) [1]

Эм, ну попробуй чтоли определять разрешение с помощью
function ExtractFileExt(const FileName: string): string;


 
Amoeba ©   (2005-04-06 16:23) [2]

Что имеется в виду под разрешением? Высота и ширина наверное? Или что-то другое? Если о перевом, то надо знать формат этих файлов. В их заголовочных разделах записана такая информация.


> Nes ©   (06.04.05 15:22) [1]
> Эм, ну попробуй чтоли определять разрешение с помощью
> function ExtractFileExt(const FileName: string): string;

Подумай хорошенько, какую глупость сморозил. Речь ведь идет не о расширении а о разрешении.


 
DS   (2005-04-06 20:50) [3]

Конечно о разрешении (Высота и ширина) ... про заголовки интересно . но как их прочитать ... хотябы для jpeg файла :)


 
Gero ©   (2005-04-06 21:43) [4]

Высота и ширина это не разрешение.


 
Gero ©   (2005-04-06 21:44) [5]

Читай заголовок файла и извлекай оттуда высоту и ширину.


 
uny ©   (2005-04-07 09:44) [6]

не на все картинки есть разрешение!


 
wicked ©   (2005-04-07 12:37) [7]

для BMP:
.bool __fastcall GetDIBDim(void * srcdata, int * width, int * height)
.{
. LPBITMAPINFO bi = (LPBITMAPINFO)((LPBYTE)srcdata + sizeof(BITMAPFILEHEADER));
. bool result = ((char *)srcdata)[0] == "B" && ((char *)srcdata)[1] == "M";
. if(result){
.  if(width)
.   *width = bi->bmiHeader.biWidth;
.  if(height)
.   *height = bi->bmiHeader.biHeight;
. }
. return result;
.}

для JPEG:
.bool __fastcall JPEGReadDim(TMemoryStream * data, int &w, int &h)
.{
. bool result = true;
.
. jpeg_decompress_struct srcinfo;
. jpeg_error_mgr jerr;
.
. srcinfo.err = errBind(&jerr);
. jpeg_create_decompress(&srcinfo);
. try {
.  try {
.   data->Position = 0;
.   jiBind(&srcinfo, data);
.
.   jpeg_read_header(&srcinfo, FALSE);
.
.   w = srcinfo.image_width;
.   h = srcinfo.image_height;
.  } __finally {
.   jpeg_destroy_decompress(&srcinfo);
.  }
. } catch(...) {
.  result = false;
. }
. return result;
.}
.
.#define buf_size 4096
.
.//---------------------------------------------------------------------------
.typedef struct tagJPEGInput {
. struct jpeg_source_mgr pub;
. TCustomMemoryStream * data;
.} JPEGInput;
.
.// JPEG input
.
.METHODDEF(void) jiInitSource(j_decompress_ptr cinfo)
.{
. JPEGInput * src = (JPEGInput *) cinfo->src;
. if(src->data) src->data->Position = 0;
.}
.
.static JOCTET eof_buffer[2] = { 0xff, JPEG_EOI };
.
.METHODDEF(boolean) jiRead(j_decompress_ptr cinfo)
.{
. JPEGInput * src = (JPEGInput *) cinfo->src;
. if(src->data && src->data->Position < src->data->Size){
.  src->pub.next_input_byte = (JOCTET *) ((char *)src->data->Memory + (int)src->data->Position);
.  int rest_size = src->data->Size - src->data->Position;
.  if(rest_size > buf_size){
.   src->pub.bytes_in_buffer = buf_size;
.   src->data->Position += buf_size;
.  } else {
.   src->pub.bytes_in_buffer = rest_size;
.   src->data->Seek(0, soFromEnd);
.  }
. } else {
.  src->pub.next_input_byte = eof_buffer; // substitute fake JPEG eof MARKER
.  src->pub.bytes_in_buffer = 2;
. }
. return TRUE;
.}
.
.METHODDEF(void) jiSkip(j_decompress_ptr cinfo, long num_bytes)
.{
. JPEGInput * src = (JPEGInput *) cinfo->src;
. num_bytes -= src->pub.bytes_in_buffer;
. if(num_bytes > 0 && src->data){
.  int rest_size = src->data->Size - (src->data->Position + num_bytes);
.  if(rest_size > 0){
.   src->data->Position += num_bytes;
.   src->pub.next_input_byte = (JOCTET *) ((char *)src->data->Memory + (int)src->data->Position);
.
.   rest_size = src->data->Size - src->data->Position;
.   if(rest_size > buf_size){
.    src->pub.bytes_in_buffer = buf_size;
.    src->data->Position += buf_size;
.   } else {
.    src->pub.bytes_in_buffer = rest_size;
.    src->data->Seek(0, soFromEnd);
.   }
.  } else {
.   src->pub.next_input_byte = eof_buffer; // substitute fake JPEG eof MARKER
.   src->pub.bytes_in_buffer = 2;
.  }
. }
.
.}
.
.METHODDEF(void) jiTerminate(j_decompress_ptr cinfo)
.{
.// none
.}
.
.GLOBAL(void) jiBind(j_decompress_ptr cinfo, TCustomMemoryStream * aData)
.{
. JPEGInput * src = NULL;
. if(cinfo->src == NULL) {
.  cinfo->src = (jpeg_source_mgr *)(*cinfo->mem->alloc_small)((j_common_ptr) cinfo,
.   JPOOL_PERMANENT,
.   SIZEOF(JPEGInput));
.  memset(cinfo->src, 0, SIZEOF(JPEGInput));
. }
. src = (JPEGInput *) cinfo->src;
. src->pub.init_source = jiInitSource;
. src->pub.fill_input_buffer = jiRead;
. src->pub.skip_input_data = jiSkip;
. src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
. src->pub.term_source = jiTerminate;
. src->data = aData;
. src->data->Position = 0;
. src->pub.bytes_in_buffer = 0;
. src->pub.next_input_byte = NULL;
.}

точки в начале строк убрать....
ЗЫ извините, что по иностранному... ;)


 
wicked ©   (2005-04-07 12:40) [8]

пояснения к коду, читающему JPEG - необходима библиотека IJG, скомпилировать её простым компилятором си, затем перевести необходимые типы и структуры на паскаль (не забывая о выравнивании членов структур) и прилинковать необходимые obj файлы директивой {$L}...
так, кстати, и сделана поддержка JPEG в TJPEGImage...


 
wicked ©   (2005-04-07 12:41) [9]

как более простой выход - поискать что то с готовым language binding для delphi.... например, глянуть на ImageMagick (просто совет, не знаю, будет ли он читать заголовки)...


 
Магнитоныч   (2005-04-07 23:09) [10]

http://delphimaster.ru/cgi-bin/faq.pl?look=1&id=988625329&n=21
Это?


 
DS   (2005-04-08 00:23) [11]

http://delphimaster.ru/cgi-bin/faq.pl?look=1&id=988625329&n=21
Отличная тема! то что надо .. спасибо огромное :)



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
4-1118827675
mad0max
2005-06-15 13:27
2005.08.14
Transparent STATIC


3-1120477465
Митяй
2005-07-04 15:44
2005.08.14
Сохранение результата запроса в таблицу


8-1113129692
Дятел-45
2005-04-10 14:41
2005.08.14
Можно ли получить изображение из веб-камеры в Delphi?


1-1122031254
msguns
2005-07-22 15:20
2005.08.14
Как идентифицировать объект по указателю на него ?


14-1122001061
NewWonder
2005-07-22 06:57
2005.08.14
Пишу экзамен!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский