Разрешение и размеры BMP, JPG
От: Роксолан Россия  
Дата: 07.05.02 03:34
Оценка:
Доброго времени суток!

Такой вопрос. Как получить разрешение в dpi (можно в какой-либо другой единице) для картинок, которые храняться в виде *.BMP, *.JPG?

Если не трудно короткий пример на чем-нибудь (VC++, VB, Delphi)

Заранее благодарен, Роксолан.
Re: Разрешение и размеры BMP, JPG
От: Lefay Россия  
Дата: 15.05.02 05:45
Оценка:
Здравствуйте Роксолан, Вы писали:

Р>Доброго времени суток!


Р>Такой вопрос. Как получить разрешение в dpi (можно в какой-либо другой единице) для картинок, которые храняться в виде *.BMP, *.JPG?


Р>Если не трудно короткий пример на чем-нибудь (VC++, VB, Delphi)


Р>Заранее благодарен, Роксолан.


Данная информация определенно хранится в заголовке — я щас не помню где именно,
но думаю не составить большого труда найти информацию на эту тему в сети,
например на w3c.org, так форматы о которых ты говоришь открыты.

Удачи
Взойти на гору можно разными путями, но само восхождение остается неизменным.
Re[2]: Разрешение и размеры BMP, JPG
От: visitant Украина  
Дата: 15.05.02 10:28
Оценка:
А что такое "Разрешение картинки в dpi"?
Re: Разрешение и размеры BMP, JPG
От: Андрей Симонцев Россия  
Дата: 18.05.02 18:33
Оценка:
Здравствуйте Роксолан, Вы писали:

Р>Доброго времени суток!


Р>Такой вопрос. Как получить разрешение в dpi (можно в какой-либо другой единице) для картинок, которые храняться в виде *.BMP, *.JPG?


Юзай GDI+. Он может загружать BMP, JPEG, PNG, GIF и TIFF и узнавать DPI... И вообще рулезная штука
Sincerely yours,
Andrew Simontsev.
Re: Разрешение и размеры BMP, JPG
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 03.06.02 10:45
Оценка:
Здравствуйте Роксолан, Вы писали:

Р>Доброго времени суток!


Р>Такой вопрос. Как получить разрешение в dpi (можно в какой-либо другой единице) для картинок, которые храняться в виде *.BMP, *.JPG?


Р>Если не трудно короткий пример на чем-нибудь (VC++, VB, Delphi)


Р>Заранее благодарен, Роксолан.


Вот пример на C++ Builder (сорри, выдирал из своего класса, так что код избыточен):


//---------------------------------------------------------------------------
long TImageInfoImpl::Mult(BYTE lsb, BYTE msb)
{
    return (lsb + (msb * 256) );
}
//---------------------------------------------------------------------------
bool TImageInfoImpl::GetJpegInfo(String FileName)
{

FILE* hFile = fopen(FileName.c_str(),"rb");

if(!hFile) {
   SetErrorCode(errorOpenFile);
   return false;
   }

long lPos=0;
BYTE bBuf[3]={0};
bool bMarkerFound=false;
bool bExitFlag=false;

while(1) {

 if(feof(hFile)) {
   SetErrorCode(badFileFormat);
   fclose(hFile); return false;
  }

 if(!fread(bBuf,3,1,hFile)) {
   SetErrorCode(errorReadingData);
   fclose(hFile); return false;
  }

if(bBuf[0] == 0xFF && bBuf[1] == 0xD8 && bBuf[2] == 0xFF) {
    bMarkerFound=true; break;
    }

if(fseek(hFile,lPos+1,SEEK_SET)!=0) {

    SetErrorCode(badFilePointer);
    fclose(hFile);return false;
   }

lPos = ftell(hFile);

 if(lPos==-1L) {
   SetErrorCode(badFilePointer);
   fclose(hFile); return false;
  }

}//while

if(!bMarkerFound) {
  SetErrorCode(badFileFormat);
  fclose(hFile);
  return false;
  }

if(fseek(hFile,lPos+2,SEEK_SET)!=0) {

  SetErrorCode(badFilePointer);
  fclose(hFile);return false;
  }

lPos = ftell(hFile);

 if(lPos==-1L) {
   SetErrorCode(badFilePointer);
   fclose(hFile); return false;
  }

while(1) {

if(feof(hFile)) {
   SetErrorCode(badFileFormat);
   fclose(hFile); return false;
   }

   while(1) {

     if(feof(hFile)) {
         SetErrorCode(badFileFormat);
         fclose(hFile); return false;
         }

     if(!fread(bBuf,2,1,hFile)) {
                   SetErrorCode(errorReadingData);
              fclose(hFile); return false;
          }

             if( bBuf[0] == 0xFF && bBuf[1] != 0xFF) break;
         
           if(fseek(hFile,lPos+1,SEEK_SET)!=0) {
                  SetErrorCode(badFilePointer);
                  fclose(hFile);return false;
                 }

                 lPos = ftell(hFile);

         if(lPos==-1L) {
                   SetErrorCode(badFilePointer);
                   fclose(hFile); return false;
            }


     } //while

    if(fseek(hFile,lPos+1,SEEK_SET)!=0) {
        SetErrorCode(badFilePointer);
        fclose(hFile);return false;
        }

    lPos = ftell(hFile);

    if(lPos==-1L) {
       SetErrorCode(badFilePointer);
       fclose(hFile); return false;
      }

    if(!fread(bBuf,3,1,hFile)) {
       SetErrorCode(errorReadingData);
       fclose(hFile); return false;
      }

            switch (bBuf[0]) {

                case 0xC0:
                case 0xC1:
                case 0xC2:
                case 0xC3:
                case 0xC5:
                case 0xC6:
                case 0xC7:
                case 0xC9:
                case 0xCA:
                case 0xCB:
                case 0xCD:
                case 0xCE:
                case 0xCF:
                     bExitFlag=true;
                    break;
            }
 
           if(bExitFlag)break;

            if(fseek(hFile,lPos + Mult(bBuf[2], bBuf[1]),SEEK_SET)!=0) {
              SetErrorCode(badFilePointer);
              fclose(hFile);return false;
            }

            lPos = ftell(hFile);

            if(lPos == -1L) {
                SetErrorCode(badFilePointer);
                fclose(hFile);
                return false;
                }


} //while

if(fseek(hFile,lPos + 4,SEEK_SET)!=0) {

    SetErrorCode(badFilePointer);
    fclose(hFile);return false;

}

if(fread(bBuf,2,1,hFile)) {

    FHeight = Mult(bBuf[1], bBuf[0]); // высота

if(fread(bBuf,2,1,hFile)) {
        FWidth = Mult(bBuf[1], bBuf[0]); // ширина

BYTE bpp=0;
if(fread(&bpp,1,1,hFile)) FBitsPerPixel = bpp*8; // Бит на пиксел

  } else {
    SetErrorCode(errorReadingData);
    fclose(hFile);
    return false;
      }

} else {
    SetErrorCode(errorReadingData);
    fclose(hFile);
    return false;
   }
fclose(hFile);
SetErrorCode(noErrors);
return true;
}
//---------------------------------------------------------------------------
bool TImageInfoImpl::GetBmpInfo(String FileName)
{
BITMAPFILEHEADER   bmfh;
BITMAPINFOHEADER   bmih;

memset(&bmfh,0,sizeof(BITMAPFILEHEADER));
memset(&bmih,0,sizeof(BITMAPINFOHEADER));

FILE* hFile = fopen(FileName.c_str(),"rb");

if(!hFile) {
    SetErrorCode(errorOpenFile);
    return false;
    }

if(!fread(&bmfh,sizeof(BITMAPFILEHEADER),1,hFile))//read header
 {
  SetErrorCode(errorReadingData);
  fclose(hFile);
  return false;
 }

char type[3];

memcpy (&type,&bmfh.bfType,2);
type[2]='\0';

if(strcmpi(type,"BM")!=0)
{
  SetErrorCode(badFileFormat);
  fclose(hFile);
  return false;
}

if(!fread(&bmih,sizeof(BITMAPINFOHEADER),1,hFile))//read header
 {
  SetErrorCode(errorReadingData);
  fclose(hFile);
  return false;
 }


FWidth = bmih.biWidth; // ширина
FHeight = bmih.biHeight<0?-bmih.biHeight:bmih.biHeight; // высота

FBitsPerPixel = bmih.biBitCount; // бит на пиксел

fclose(hFile);
SetErrorCode(noErrors);
return true;

}
//---------------------------------------------------------------------------
Re: Разрешение и размеры BMP, JPG
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 03.06.02 10:46
Оценка:
Здравствуйте Роксолан, Вы писали:

Р>Доброго времени суток!


Р>Такой вопрос. Как получить разрешение в dpi (можно в какой-либо другой единице) для картинок, которые храняться в виде *.BMP, *.JPG?


Р>Если не трудно короткий пример на чем-нибудь (VC++, VB, Delphi)


Р>Заранее благодарен, Роксолан.



Блин, вопроса не понял Сорри... Надо-же было про dpi
Re[2]: Разрешение и размеры BMP, JPG
От: Archer  
Дата: 03.06.02 11:42
Оценка:
Здравствуйте Flamer, Вы писали:


F>Блин, вопроса не понял Сорри... Надо-же было про dpi


ты задумайся над вопросом какое dpi может быть jpg или bmp
этож вобще маразм
Это вам не это... (с) Дикий прапор
Re[3]: Разрешение и размеры BMP, JPG
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 03.06.02 11:54
Оценка:
Здравствуйте Archer, Вы писали:

A>Здравствуйте Flamer, Вы писали:



F>>Блин, вопроса не понял Сорри... Надо-же было про dpi


A>ты задумайся над вопросом какое dpi может быть jpg или bmp

A>этож вобще маразм

Дело в том, что, допустим, тот-же формат JPEG допускает хранение в себе информации о Dot Per Inch (например, 300 точек на дюйм). Так что никакой это не маразм...

Да и TIFF тож такое в себе хранит... Тэг, если мне не изменяет память, называется ResolutionForUnit.

И не пинать меня
Re[4]: Разрешение и размеры BMP, JPG
От: Archer  
Дата: 03.06.02 12:21
Оценка:
Здравствуйте Flamer, Вы писали:

F>Дело в том, что, допустим, тот-же формат JPEG допускает хранение в себе информации о Dot Per Inch (например, 300 точек на дюйм). Так что никакой это не маразм...


F>Да и TIFF тож такое в себе хранит... Тэг, если мне не изменяет память, называется ResolutionForUnit.


F>И не пинать меня


вобщето я вопрос обругал
да не со зла просто разрешение(файла) в дпи не хранится..разрешение в пикселях должно быть.
дпи ж у принтеров у каждого свое, а в файле рекомендуемое наверно.
Это вам не это... (с) Дикий прапор
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.