Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Работа с BMP


Автор: Golden Hands 29.6.2006, 01:40
Есть примерно такой код для обработки списка файлов:

Код

var bp: TBitmap;

  bp:=tbitmap.Create;
  bp.LoadFromFile(<filename>);
  ...
  bp.SaveToFile(<filename>);
  bp.Free;



При загрузке некоторых файлов возникает исключение (неправильный формат). Хотя все файлы формата BMP, разница лишь в том, что получены они разными программами. В чем суть проблемы? 

Автор: Mechanic 29.6.2006, 02:21
Не должно бы.  smile 
А ежели поставить 

Код

  bp:=tbitmap.Create;
try 
  bp.LoadFromFile(<filename>);
except
  on E:Exception do OutputDebugString(PChar(filename+' '+E.Message));
end;
  bp.Free;


И потом внимательно посмотреть, что же за файлы не открываются?  smile   

Автор: Kesh 29.6.2006, 08:42
Дело в том, что битмапы кодируются двумя способами... Есть RGB encoding, когда каждый пиксел кодируется отдельно 3 цветами, а есть Length encoding - кодирутся последовательности байт.
Length encoding позволяет сократить размеры Bitmapa, но не переваривается в Delphi... Поэтому все, что тебе нужно - пересохранить картинки в RGB Encoding 

Автор: Alexeis 29.6.2006, 12:11
Kesh, более того bmp может быть в 5 форматах сжатия 
1) RGB - несжатый
2) RLE
3) PNG
4) JPG
5) BI_BITFIELDS - несжатый

Чуть более подробно можно почитать в мой статье
http://forum.vingrad.ru/index.php?showtopic=94227&hl=%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82,and,bmp

Windows XP - умеет работать со всеми 5, а делфи нет

Кроме того врядли TBitmap разбират изображения имеющие
полный заголовок BITMAPV5HEADER  

Автор: Golden Hands 29.6.2006, 16:11
Цитата(Kesh @  29.6.2006,  11:42 Найти цитируемый пост)
Поэтому все, что тебе нужно - пересохранить картинки в RGB Encoding 

Ручками нереально. А потоково в Delphi нельзя из-за сабжа. Замкнутый круг.  smile 

Цитата(alexeis1 @  29.6.2006,  15:11 Найти цитируемый пост)
Windows XP - умеет работать со всеми 5, а делфи нет

Значит, никак не взять их в Delphi? Может быть существует готовый компонент? 

Автор: Alexeis 29.6.2006, 16:44
Golden Hands, есть вариант - поискать на torry.net - более продвинутый компонент для работы с bmp-шками (таких на самом деле очень много).
Либо написать на api свой конвертер, в этом случае есть все шансы, что он не будет работать на других windows отличных от XP, правда насколько я знаю даже в XP png и jpeg не полностью поддерживаются.
RLE - не поддерживается разве, что win3.11 
Может просто определять, что файл не в том формате и сообщить об этом пользователю! (на самом деле это легко определить и без всяких TBitmap) 

Автор: Golden Hands 29.6.2006, 21:35
Цитата(alexeis1 @  29.6.2006,  19:44 Найти цитируемый пост)
Может просто определять, что файл не в том формате

Это конечно...

 

Автор: Golden Hands 30.6.2006, 01:54
Компонент TBitmapPlus решил проблему. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)