Главная страница
    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.013 c
11-1105368888
TeNY
2005-01-10 17:54
2005.08.14
А где сайт ?http://kol.mastak.ru/ дает 404!


14-1121937646
Дмитрий_Б
2005-07-21 13:20
2005.08.14
Не открываются архивы старых форумов


11-1105276208
Э-э-э Вася
2005-01-09 16:10
2005.08.14
Вывод jpeg в MCK (KOL)


1-1122021728
Max4
2005-07-22 12:42
2005.08.14
заглавная буква после точки.


4-1118668593
Толян
2005-06-13 17:16
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский