<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=288213&amp;view=findpost&amp;p=2433691</guid>
        <pubDate>Fri, 27 Nov 2009 01:46:23 +0000</pubDate>
        <title>Чтение картинки из TIFF файла</title>
        <link>https://forum.sources.ru/index.php?showtopic=288213&amp;view=findpost&amp;p=2433691</link>
        <description><![CDATA[swe: Передо мной встала задача - загрузить картинку из 16-битного монохромного TIFF файла. <br>
Готовых компонент найти не удалось. Полезную информацию я нашел здесь:  <a class='tag-url' href='http://www.awaresystems.be/imaging/tiff/faq.html' target='_blank'>Описание TIFF формата</a><br>
Выяснять детали - где хранятся размеры картинки и начальное смещение пришлось выяснять экспериментально. Для этого и была написана предлагаемая ниже утилита:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">(* &nbsp; &nbsp; &nbsp; -- программа работает без формы! -- &nbsp; &nbsp; &nbsp; *)</div><div class="code_line">(* выбираем из текущей директории все TIFF файлы &nbsp; *)</div><div class="code_line">(* для каждого TIFF файла читаем теги &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*)</div><div class="code_line">(* &nbsp; &nbsp; &nbsp;и выводим их в текстовый файл TIFF.TXT &nbsp; &nbsp; *)</div><div class="code_line">&nbsp;</div><div class="code_line">program TIFFTags;</div><div class="code_line">uses Windows, Classes, SysUtils;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">TDirRec = class (TObject)</div><div class="code_line">&nbsp;&nbsp;Attr: word;</div><div class="code_line">&nbsp;&nbsp;Time: Longint;</div><div class="code_line">&nbsp;&nbsp;Size: Longint;</div><div class="code_line">&nbsp;&nbsp;Name: string[255];</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">TDirList = class(TList)</div><div class="code_line">procedure Done; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (* освободить память &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*)</div><div class="code_line">procedure CollectExt(aPath:string;sExt:string); (* собрать по Ext *)</div><div class="code_line">procedure CollectTpl(PathTpl:string); &nbsp; (* добавить файлы соотв-щие шаблону *)</div><div class="code_line">&nbsp;&nbsp;end; &nbsp;(* TDirList *)</div><div class="code_line">&nbsp;</div><div class="code_line">(*============================================================================*)</div><div class="code_line">(* служебные функции *)</div><div class="code_line">&nbsp;</div><div class="code_line">procedure WarnAbs(S:string); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(* неподавляемый WARN *)</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;MessageBox(GetActiveWindow,PChar(S),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PChar(&#39;ПРЕДУПРЕЖДЕНИЕ ИЛИ НАПОМИНАНИЕ&#39;),MB_OK);</div><div class="code_line">end;</div><div class="code_line">function AddBackSlashForce(Path:string):string;</div><div class="code_line">(* проверяет, что Path - именно каталог, а не файл, добавляет &#39;\&#39; в конец *)</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if length(Path) = 0 then begin result := Path; Exit; end; (* Current Path *)</div><div class="code_line">&nbsp;&nbsp;if Path[Length(Path)] &#60;&#62; &#39;\&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Not SysUtils.FileExists(Path) then Path := Path + &#39;\&#39;;</div><div class="code_line">&nbsp;&nbsp;Result := Path;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">(*============================================================================*)</div><div class="code_line">(* перебор файлов в текущей поддиректории *)</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TDirList.Done;</div><div class="code_line">var D : TDirRec; I : integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;for I := Self.Count-1 downto 0 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;D := TDirRec(Items[I]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;D.Name := &#39;&#39;; &nbsp;(* освобождаем память, занятую строкой *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;D.Free;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Self.Delete(I);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TDirList.CollectTpl(PathTpl:string);</div><div class="code_line">var F : TSearchRec;</div><div class="code_line">&nbsp;&nbsp; &nbsp;D : TDirRec;</div><div class="code_line">&nbsp;&nbsp; &nbsp;DosError : integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;DosError :=</div><div class="code_line">&nbsp;&nbsp; &nbsp;FindFirst(PathTpl, faReadOnly + faHidden + faDirectory + faArchive, F);</div><div class="code_line">&nbsp;&nbsp;while (DosError = 0) do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;D := TDirRec.Create;</div><div class="code_line">&nbsp;&nbsp; &nbsp;D.Attr := F.Attr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;D.Time := F.Time;</div><div class="code_line">&nbsp;&nbsp; &nbsp;D.Size := F.Size;</div><div class="code_line">&nbsp;&nbsp; &nbsp;D.Name := F.Name;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Add(D);</div><div class="code_line">&nbsp;&nbsp; &nbsp;DosError := FindNext(F);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;FindClose(F);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TDirList.CollectExt(aPath:string;sExt:string);</div><div class="code_line">var PathTpl : string;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if Not DirectoryExists(aPath) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;WARNAbs(&#39;DirList.CollectExt: Path &#60;&#39;+aPath+&#39;&#62; Not found!&#39;); Exit;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;if Count &#60;&#62; 0 then Done; &nbsp;(* &quot;забыть&quot; предыдущую коллекцию файлов *)</div><div class="code_line">&nbsp;&nbsp;aPath := AddBackSlashForce(aPath);</div><div class="code_line">&nbsp;&nbsp;PathTpl := aPath +&#39;*.&#39; + sExt; &nbsp;(* шаблон для FindFirst/FindNext *)</div><div class="code_line">&nbsp;&nbsp;CollectTpl(PathTpl);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">(*============================================================================*)</div><div class="code_line">(* строковые функции *)</div><div class="code_line">&nbsp;</div><div class="code_line">const hexChars: array [0..$F] of char = &#39;0123456789ABCDEF&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">function HexB(B:byte):string;</div><div class="code_line">begin HexB:=hexChars[B shr 4]+hexChars[B and $F] end;</div><div class="code_line">&nbsp;</div><div class="code_line">function HexW(W:word):string;</div><div class="code_line">begin HexW:=HexB(Hi(W))+HexB(Lo(W)) end;</div><div class="code_line">&nbsp;</div><div class="code_line">function ISt(I:Int64):string;</div><div class="code_line">begin result := IntToStr(I) end;</div><div class="code_line">&nbsp;</div><div class="code_line">function NSt(I:longint;D:integer):string;(*ЦЕЛОЕ В СТРОКУ С ВЕДУЩИМИ пробелами*)</div><div class="code_line">var S : string;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Str(I,S);</div><div class="code_line">&nbsp;&nbsp;if length(S) &#62; D &nbsp;then S := copy(S,length(S)-D+1,D); (* правая часть *)</div><div class="code_line">&nbsp;&nbsp;while length(S) &#60; D do S := &#39; &#39;+S;</div><div class="code_line">&nbsp;&nbsp;NSt := S;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function SSt(S:string;N:integer):string;</div><div class="code_line">var L : integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;L := length(S);</div><div class="code_line">&nbsp;&nbsp;if L &#60; N then begin SetLength(S,N); FillChar(S[L+1],N-L,&#39; &#39;); end;</div><div class="code_line">&nbsp;&nbsp;result := S;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">(*============================================================================*)</div><div class="code_line">(* главная процедура *)</div><div class="code_line">&nbsp;</div><div class="code_line">procedure ExploreTiff;</div><div class="code_line">var fo &nbsp; : System.Text; &nbsp;(* выходной файл *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;fi &nbsp; : file of word; (* для входных TIFF - файлов *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;fno &nbsp;: string; &nbsp;(* имя выходного файла &nbsp; &nbsp;*)</div><div class="code_line">&nbsp;&nbsp; &nbsp;fni &nbsp;: string; &nbsp;(* имя исследуемого файла *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;aDir : TDirList;(* для сбора списка TIFF - файлов *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;aFil : TDirRec; (* данные текущего файла *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;sDir : string; &nbsp;(* имя текущего каталога *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;S,S1,S2,S3 : string;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ITiff : integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ITag &nbsp;: integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NTag &nbsp;: integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;W &nbsp; &nbsp; : word;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WA &nbsp; &nbsp;: packed array[1..2] of word;</div><div class="code_line">&nbsp;&nbsp; &nbsp;N2 &nbsp; &nbsp;: DWORD absolute WA;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WId &nbsp; : word;</div><div class="code_line">&nbsp;&nbsp; &nbsp;WTy &nbsp; : word;</div><div class="code_line">&nbsp;&nbsp; &nbsp;LNa &nbsp; : integer; &nbsp; &nbsp; &nbsp; &nbsp;(* макс.длина имени файла *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;L2,L3 : integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;fno := &#39;TIFF.txt&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;aDir := TDirList.Create;</div><div class="code_line">&nbsp;&nbsp;sDir := SysUtils.GetCurrentDir;</div><div class="code_line">&nbsp;&nbsp;aDir.CollectExt(sDir,&#39;tif&#39;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Assign(fo,fno);</div><div class="code_line">&nbsp;&nbsp;rewrite(fo);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;LNa := 0;</div><div class="code_line">&nbsp;&nbsp;for ITiff := 0 to aDir.Count-1 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;aFil := aDir.Get(ITiff);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fni := aFil.Name;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if LNa &#60; length(fni) then LNa := length(fni);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;S1 := &#39;имя файла &#39;; &nbsp;S2 := &#39;порядок_байт &#39;; S3 := &#39;Версия &#39;;</div><div class="code_line">&nbsp;&nbsp;if LNa &#60; length(S1) then LNa := length(S1);</div><div class="code_line">&nbsp;&nbsp;LNa := LNa + 1;</div><div class="code_line">&nbsp;&nbsp;L2 := length(S2);</div><div class="code_line">&nbsp;&nbsp;L3 := length(S3);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;S := SSt(S1,LNa)+S2+S3+&#39;Оффсет_IDF Тэгов&#39;;</div><div class="code_line">&nbsp;&nbsp;writeln(fo,S);</div><div class="code_line">&nbsp;&nbsp;S := SSt(&#39;умолчания:&#39;,LNa)+SSt(&#39;49&#39;,L2)+SSt(&#39;{text}2A&#39;,L3)+&#39;{text}000008 &nbsp;19&#39;;</div><div class="code_line">&nbsp;&nbsp;writeln(fo,S);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for ITiff := 0 to aDir.Count-1 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;aFil := aDir.Get(ITiff);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fni := aFil.Name;</div><div class="code_line">&nbsp;&nbsp; &nbsp;S := SSt(fni,LNa);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Assign(fi,fni);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Reset(fi);</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,W); S := S + SSt(&#39;$&#39;+HexW(W),L2); (* порядок байт *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,W); S := S + SSt(&#39;$&#39;+HexW(W),L3); (* версия TIFF &nbsp;*)</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,WA[1]); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (* offset IDF &nbsp; *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,WA[2]); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (* offset IDF &nbsp; *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;S := S + &#39;$&#39;+HexW(WA[2])+HexW(WA[1])+&#39; &nbsp;&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,W); S := S + ISt(W); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(* число тегов &nbsp;*)</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln(fo,S);</div><div class="code_line">&nbsp;&nbsp; &nbsp;System.Close(fi);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for ITiff := 0 to aDir.Count-1 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;aFil := aDir.Get(ITiff);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fni := aFil.Name;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;(* далее открываем двоичный файл, чтобы прочитать теги *)</div><div class="code_line">&nbsp;&nbsp; &nbsp;Assign(fi,fni);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Reset(fi);</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,W);</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,W);</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,WA[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,WA[2]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;read(fi,W);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;NTag := W;</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln(fo);</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln(fo,SSt(fni,LNa)+&#39;ТЭГИ ---------------------&#39;);</div><div class="code_line">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;34 &nbsp; 34 2000000000 341234</div><div class="code_line">&nbsp;&nbsp; &nbsp;S := &#39; № &nbsp;Id_тега DataType &nbsp;NValue &nbsp; &nbsp;Offset/Value&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;writeln(fo,S);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for ITag := 1 to NTag do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;read(fi,WId);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;read(fi,WTy);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;read(fi,WA[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;read(fi,WA[2]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;S := NSt(ITag,3)+&#39; $&#39;+HexW(WId)+&#39; &nbsp; $&#39;+HexW(WTy)+&#39; &#39;+ NSt(N2,10);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;read(fi,WA[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;read(fi,WA[2]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;S := S+&#39; $&#39;+HexW(WA[2])+HexW(WA[1])+&#39; &#39;+NSt(N2,10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;writeln(fo,S);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;System.Close(fi);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;System.Close(fo);</div><div class="code_line">end; (* ExploreTiff *)</div><div class="code_line">&nbsp;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;&nbsp;ExploreTiff;</div><div class="code_line">End.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Полученную в результате компиляции программу нужно запускать в том каталоге, в котором размещены TIFF файлы. В результате получается текстовое описание содержащихся в них тегов.<br>
Пример результата работы программы tifftags.exe :<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">имя файла &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;порядок_байт Версия Оффсет_IDF Тэгов</div><div class="code_line">умолчания: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 49 &nbsp; &nbsp; &nbsp; &nbsp;{text}2A &nbsp;{text}000008 &nbsp;19</div><div class="code_line">12x16_2byte.tif &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;49 &nbsp; &nbsp; &nbsp; &nbsp;{text}2A &nbsp;{text}000008 &nbsp;19</div><div class="code_line">12x16_2byteRGB.tif &nbsp; &nbsp; &nbsp; 49 &nbsp; &nbsp; &nbsp; &nbsp;{text}2A &nbsp;{text}000008 &nbsp;20</div><div class="code_line">8x8_1byte.tif &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;49 &nbsp; &nbsp; &nbsp; &nbsp;{text}2A &nbsp;{text}000008 &nbsp;19</div><div class="code_line">8x8_2byte.tif &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;49 &nbsp; &nbsp; &nbsp; &nbsp;{text}2A &nbsp;{text}000008 &nbsp;19</div><div class="code_line">&nbsp;</div><div class="code_line">12x16_2byte.tif &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ТЭГИ ---------------------</div><div class="code_line">&nbsp;№ &nbsp;Id_тега DataType &nbsp;NValue &nbsp; &nbsp;Offset/Value</div><div class="code_line">&nbsp;&nbsp;1 {text}FE &nbsp; {text}04 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0</div><div class="code_line">&nbsp;&nbsp;2 00 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}00000C &nbsp; &nbsp; &nbsp; &nbsp; 12</div><div class="code_line">&nbsp;&nbsp;3 01 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000010 &nbsp; &nbsp; &nbsp; &nbsp; 16</div><div class="code_line">&nbsp;&nbsp;4 02 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000010 &nbsp; &nbsp; &nbsp; &nbsp; 16</div><div class="code_line">&nbsp;&nbsp;5 03 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000001 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1</div><div class="code_line">&nbsp;&nbsp;6 06 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000001 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1</div><div class="code_line">&nbsp;&nbsp;7 11 &nbsp; {text}04 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}0046BC &nbsp; &nbsp; &nbsp;18108</div><div class="code_line">&nbsp;&nbsp;8 12 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000001 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1</div><div class="code_line">&nbsp;&nbsp;9 15 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000001 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1</div><div class="code_line">&nbsp;10 16 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000010 &nbsp; &nbsp; &nbsp; &nbsp; 16</div><div class="code_line">&nbsp;11 17 &nbsp; {text}04 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000180 &nbsp; &nbsp; &nbsp; &nbsp;384</div><div class="code_line">&nbsp;12 1A &nbsp; {text}05 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}0000F2 &nbsp; &nbsp; &nbsp; &nbsp;242</div><div class="code_line">&nbsp;13 1B &nbsp; {text}05 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}0000FA &nbsp; &nbsp; &nbsp; &nbsp;250</div><div class="code_line">&nbsp;14 28 &nbsp; {text}03 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}000002 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2</div><div class="code_line">&nbsp;15 31 &nbsp; {text}02 &nbsp; &nbsp; &nbsp; &nbsp; 28 {text}000102 &nbsp; &nbsp; &nbsp; &nbsp;258</div><div class="code_line">&nbsp;16 32 &nbsp; {text}02 &nbsp; &nbsp; &nbsp; &nbsp; 20 {text}00011E &nbsp; &nbsp; &nbsp; &nbsp;286</div><div class="code_line">&nbsp;17 BC &nbsp; {text}01 &nbsp; &nbsp; &nbsp;15398 {text}000132 &nbsp; &nbsp; &nbsp; &nbsp;306</div><div class="code_line">&nbsp;18 49 &nbsp; {text}01 &nbsp; &nbsp; &nbsp; 2404 {text}003D58 &nbsp; &nbsp; &nbsp;15704</div><div class="code_line">&nbsp;19 69 &nbsp; {text}04 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 {text}00483C &nbsp; &nbsp; &nbsp;18492</div><div class="code_line">...</div></ol></div></div></div></div><br>
<br>
Отсюда легко вычислить, что: <br>
ширина картинки лежит в тэге &#036;0100, <br>
высота - в тэге &#036;101,<br>
число бит на пиксель в тэге &#036;0102,<br>
начальное смещение картинки в тэге &#036;0111 и<br>
число байт картинки в тэге &#036;0117]]></description>
        <author>swe</author>
        <category>Графика, звук, анимация, игры</category>
      </item>
	
      </channel>
      </rss>
	