<?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=164008&amp;view=findpost&amp;p=1376169</guid>
        <pubDate>Wed, 13 Dec 2006 17:06:41 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1376169</link>
        <description><![CDATA[WDaft: Да, вероятно это именно так.<br>Хотя.. Может его как ни будь и использовать... как ни будь прикрутить. А то что велосипед изобретать.]]></description>
        <author>WDaft</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1375019</guid>
        <pubDate>Tue, 12 Dec 2006 21:40:19 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1375019</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1374995'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>WDaft &#064; <time class="tag-quote__quoted-time" datetime="2006-12-12T21:09:29+00:00">12.12.06, 21:09</time></span><div class='quote '>Получив здесь не достающую мне информацию, я пришёл к выводу, что надо бы вообще написать отдельный модуль (свой) для работы с Битмапом.</div></div><br>
Возможно именно поэтому в модуле graphics и используется чтение файла через BlockRead. А затем, после получения нужной инфы, подключаются апи.]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374995</guid>
        <pubDate>Tue, 12 Dec 2006 21:09:29 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374995</link>
        <description><![CDATA[WDaft: Dmitry_177, верно, я именно так и делаю. Только не вздумай получать от туда BPP(bmBitsPixel)&#33; Так как, как я уже писал она вернёт BPP текущего Device Context, а не то как записано в фаиле и не то, как вернётся из GetDIBits. Вот для этого уже придётся действительно читать Хеадер фаила.<br>Получив здесь не достающую мне информацию, я пришёл к выводу, что надо бы вообще написать отдельный модуль (свой) для работы с Битмапом. Как бы я не любил WinAPI, с битмапом там не всё так хорошо как хотелось бы.. (ИМХО).]]></description>
        <author>WDaft</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374763</guid>
        <pubDate>Tue, 12 Dec 2006 16:39:07 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374763</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1374396'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-12T13:01:33+00:00">12.12.06, 13:01</time></span><div class='quote '>BmpSize.cx и BmpSize.cy равны нулю...</div></div><br>
Нда, в справе в самом конде есть замечательное примечание - она возвращает размер установленный с помощью SetBitmapDimensionEx. Так что не катит.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1374621'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-12T14:42:30+00:00">12.12.06, 14:42</time></span><div class='quote '>А вот так правильно определяются размеры, но только этот способ наверно медленнее чем с GetBitmapDimensionEx или нет?</div></div><br>
Все равно ничего другого не остается :( Разве что самому считывать заголовок, но зачем, если он уже считан? Уж лучше так оставь.]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374621</guid>
        <pubDate>Tue, 12 Dec 2006 14:42:30 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374621</link>
        <description><![CDATA[Dmitry_177: Битмап загружается, все правильно, потому что пробовал потом выводить его все выводится...<br>
<br>
А вот так правильно определяются размеры, но только этот способ наверно медленнее чем с GetBitmapDimensionEx или нет?<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">var</div><div class="code_line">&nbsp;&nbsp;DIBS: DIBSECTION;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;hBmp := LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;GetObject(hBmp, SizeOf(DIBS), @DIBS);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;W := DIBS.dsBm.bmWidth;</div><div class="code_line">&nbsp;&nbsp;H := DIBS.dsBm.bmHeight;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374603</guid>
        <pubDate>Tue, 12 Dec 2006 14:34:38 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374603</link>
        <description><![CDATA[WDaft: &gt;GetBitmapDimensionEx(hBmp, BmpSize);<br>&gt;BmpSize.cx и BmpSize.cy равны нулю... <br>Так а какая ошибка возвращается от GetBitmapDimensionEx?<br>И загружается ли сам Битмап?]]></description>
        <author>WDaft</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374396</guid>
        <pubDate>Tue, 12 Dec 2006 13:01:33 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1374396</link>
        <description><![CDATA[Dmitry_177: Так не работает почему-то...<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">var</div><div class="code_line">&nbsp;&nbsp;BmpSize: SIZE;</div><div class="code_line">&nbsp;&nbsp;hBmp: HBITMAP;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;hBmp := LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</div><div class="code_line">&nbsp;&nbsp;GetBitmapDimensionEx(hBmp, BmpSize);</div></ol></div></div></div></div><br>
<br>
<em class='tag-i'>BmpSize.cx</em> и <em class='tag-i'>BmpSize.cy</em> равны нулю...]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373765</guid>
        <pubDate>Mon, 11 Dec 2006 21:45:07 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373765</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373752'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T21:22:27+00:00">11.12.06, 21:22</time></span><div class='quote '>а HBITMAP разве не хэндл?</div></div><br>
Извини, забыл сказать. Хэндлом может считаться любой DWORD.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373752'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T21:22:27+00:00">11.12.06, 21:22</time></span><div class='quote '>Загружаю его из файла:<br>
hBkgnd := LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</div></div><br>
Почему бы и нет? А почему не хочешь LoadBitmap использовать?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373752'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T21:22:27+00:00">11.12.06, 21:22</time></span><div class='quote '>а как же быть с Bitmap.Width; Bitmap.Height;?</div></div><br>
Для определения ширины и высоты исходного битмапа вроде подходит функция GetBitmapDimensionEx(Handle: HBITMAP; var p: TPoint);<br>
<br>
PS: Сообщи о результатах ;) Я сам то еще не попробовал.]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373752</guid>
        <pubDate>Mon, 11 Dec 2006 21:22:27 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373752</link>
        <description><![CDATA[Dmitry_177: а HBITMAP разве не хэндл? Загружаю его из файла:<br>
<em class='tag-i'>hBkgnd := LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</em><br>
<br>
а как же быть с <strong class='tag-b'>Bitmap.Width; Bitmap.Height;</strong>?]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373742</guid>
        <pubDate>Mon, 11 Dec 2006 21:15:01 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373742</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373709'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T20:52:24+00:00">11.12.06, 20:52</time></span><div class='quote '>Это же битмап из модуля Graphics я как понял, а мне без него нужно...</div></div><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;Bitmap: TBitmap;</div></ol></div></div></div></div><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;Bitmap: Handle; // или HWND</div></ol></div></div></div></div><br>
Затем загрузи его с помощью какой либо функции:<br>
LoadBitmap - если из файла<br>
LoadResource - из ресурсов<br>
etc.<br>
И полученный хендл передаешь вместо Bitmap.Handle;]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373709</guid>
        <pubDate>Mon, 11 Dec 2006 20:52:24 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373709</link>
        <description><![CDATA[Dmitry_177: <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">Bitmap.LoadFromFile(ImgName);</div><div class="code_line">...</div><div class="code_line">biWidth := Bitmap.Width; &nbsp; // можешь поиграться с размерами</div><div class="code_line">biHeight := Bitmap.Height; // получаемого изображения</div></ol></div></div></div></div><br>
Это же битмап из модуля Graphics я как понял, а мне без него нужно...]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373651</guid>
        <pubDate>Mon, 11 Dec 2006 19:55:39 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373651</link>
        <description><![CDATA[Rouse_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373649'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AndNot &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T19:53:48+00:00">11.12.06, 19:53</time></span><div class='quote '>Ладно завязываем. Разговор то поначалу пошел про поле bmiColors</div></div><br>
Поддерживаю  :yes:]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373649</guid>
        <pubDate>Mon, 11 Dec 2006 19:53:48 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373649</link>
        <description><![CDATA[AndNot: <strong class='tag-b'>Dmitry_177</strong>, вот загрузчик битмапов, по идее должен все загружать. Так проще разобраться, а то мы что то не в ту степь поперли :lol: <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">Type</div><div class="code_line">&nbsp;&nbsp;PSprite = ^TSprite;</div><div class="code_line">&nbsp;&nbsp;TSprite = record</div><div class="code_line">&nbsp;&nbsp; &nbsp;Width : Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Height: Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Buffer: ^Byte;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">function ConvImage(ImgName: String): PSprite;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Bitmap: TBitmap;</div><div class="code_line">&nbsp;&nbsp;Buff &nbsp;: PSprite;</div><div class="code_line">&nbsp;&nbsp;Info &nbsp;: TBitmapInfo;</div><div class="code_line">&nbsp;&nbsp;MemDC : HDC;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Bitmap := TBitmap.Create;</div><div class="code_line">&nbsp;&nbsp;Bitmap.LoadFromFile(ImgName);</div><div class="code_line">// формируем заголовок</div><div class="code_line">&nbsp;&nbsp;with Info.bmiHeader do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FillChar(Info, SizeOf(TBitmapInfo), 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;biSize := SizeOf(TBitmapInfoHeader);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;biWidth := Bitmap.Width; &nbsp; // можешь поиграться с размерами</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;biHeight := Bitmap.Height; // получаемого изображения</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;biPlanes := 1; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // всегда 1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;biCompression := BI_RGB; &nbsp; // нет никакой компрессии данных</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;biBitCount := 24; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// пиксели будут в формате RGBTRIPLE</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // для RGBQUAD поставь 32</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetMem(Buff, SizeOf(TSprite));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Buff^.Width := biWidth;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Buff^.Height:= biHeight;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetMem(Buff^.Buffer,(biWidth*biHeight) * (biBitCount shr 3));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MemDC := CreateCompatibleDC(0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;GetDIBits(MemDC,Bitmap.Handle, 0, biHeight, Buff^.Buffer, Info, DIB_RGB_COLORS);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DeleteDC(MemDC);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;Bitmap.Free;</div><div class="code_line">&nbsp;&nbsp;ConvImage := Buff;</div><div class="code_line">end.</div></ol></div></div></div></div><br>
Возвращает именно растр. Его формат указан в biBitCount.<br>
Извини за возможные очепятки и некоторое несоответствие типов, дельфи в отказ пошел, похоже система последние дни доживает :( <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373642'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T19:45:43+00:00">11.12.06, 19:45</time></span><div class='quote '>с альфой они не используются</div></div><br>
Да они вообще в принципе не нужны ;) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373642'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T19:45:43+00:00">11.12.06, 19:45</time></span><div class='quote '>Этот пример абсолютно наглядно показывает структуру 32-битных растров</div></div><br>
Ладно завязываем. Разговор то поначалу пошел про поле bmiColors[].]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373642</guid>
        <pubDate>Mon, 11 Dec 2006 19:45:43 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373642</link>
        <description><![CDATA[Rouse_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373613'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AndNot &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T19:06:29+00:00">11.12.06, 19:06</time></span><div class='quote '>А есть еще 24-х и 16-ти битные. На них твой пример и загнется</div></div><br>
Конечно, но для этого есть другая часть примера, я же сказал где посмотреть :)<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373613'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AndNot &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T19:06:29+00:00">11.12.06, 19:06</time></span><div class='quote '>Там еще и маски есть</div></div><br>
Есть, но если ты знаешь формат, то можешь удивиться - с альфой они не используются :)<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373613'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AndNot &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T19:06:29+00:00">11.12.06, 19:06</time></span><div class='quote '>И на основании этого ты и сделал вывод что в bmiColors[] хранится цвет точек? Этот пример совершенно не показывает структуру BMP </div></div><br>
Этот пример абсолютно наглядно показывает структуру 32-битных растров :) <br>
Что еще имеем сказать? :)]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373613</guid>
        <pubDate>Mon, 11 Dec 2006 19:06:29 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373613</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373444'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T16:01:46+00:00">11.12.06, 16:01</time></span><div class='quote '>32-битные битмапы действительно не содержат палитру, но данные храняться в виде RGBQUAD</div></div><br>
А есть еще 24-х и 16-ти битные. На них твой пример и загнется ;) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373444'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T16:01:46+00:00">11.12.06, 16:01</time></span><div class='quote '>надеюсь все в курсе5 что внутри иконки лежат битмапы?</div></div><br>
Там еще и маски есть ;) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373444'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T16:01:46+00:00">11.12.06, 16:01</time></span><div class='quote '>У меня на сайте тоже есть пример работы</div></div><br>
И на основании этого ты и сделал вывод что в bmiColors[] хранится цвет точек? Этот пример совершенно не показывает структуру BMP ;) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373509'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T16:49:05+00:00">11.12.06, 16:49</time></span><div class='quote '>А еще мне не понятна область lpvBits</div></div><br>
Я так понял. Это буфер для образа рисунка, т.е. если нужно преобразовать битмап не в контекст устройства(DC) а в буфер, то в этом параметре передаешь на нее указатель. После чего сможешь легко определить любой пиксель ;) Собственно из-за этого параметра и весь сыр-бор.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373509'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T16:49:05+00:00">11.12.06, 16:49</time></span><div class='quote '>Я как понял это указатель на буфер цветов, а вот как его объявлять не пойму никак...</div></div><br>
GetMem()<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373509'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T16:49:05+00:00">11.12.06, 16:49</time></span><div class='quote '>Реальные размеры картинки 283 x 149, если посмотреть в свойствах файла в виндовсе, а у меня определяется как 70 x 5...<br>
</div></div><br>
Ты сам должен <strong class='tag-b'>корректно</strong> заполнять этот заголовок, прежде чем скормишь его GetDIBits.<br>
И кстати, вместо GetDC(0) попробуй так:<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;memDC := CreateCompatibleDC(0);</div><div class="code_line">&nbsp;&nbsp;GetDIBits(memDC, hBkgnd, 0, 0, nil, BMI, DIB_RGB_COLORS);</div><div class="code_line">&nbsp;&nbsp;DeleteDC(memDC);</div></ol></div></div></div></div>]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373509</guid>
        <pubDate>Mon, 11 Dec 2006 16:49:05 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373509</link>
        <description><![CDATA[Dmitry_177: А еще мне не понятна область lpvBits если само содержимое битмапа копируется, посмотрел в описании функции:<br>
<em class='tag-i'>function GetDIBits(DC: HDC; Bitmap: HBitmap; StartScan, NumScans: UINT; <strong class='tag-b'>Bits: Pointer;</strong> var BitInfo: TBitmapInfo; Usage: UINT): Integer; stdcall;</em><br>
Я как понял это указатель на буфер цветов, а вот как его объявлять не пойму никак...<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;var</div><div class="code_line">&nbsp;&nbsp;memDC: HDC;</div><div class="code_line">&nbsp;&nbsp;hBkgnd: HBITMAP;</div><div class="code_line">&nbsp;&nbsp;BMI: TBitmapInfo;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;hBkgnd := LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;memDC := GetDC(0);</div><div class="code_line">&nbsp;&nbsp;GetDIBits(memDC, hBkgnd, 0, 0, nil, BMI, DIB_RGB_COLORS);</div><div class="code_line">&nbsp;&nbsp;ReleaseDC(0, memDC);</div><div class="code_line">end;</div></ol></div></div></div></div><br>
BMI.bmiHeader.biWidth и BMI.bmiHeader.biHeight (пускай хоть и отрицательный) не правильно определяются ширина с высотой, т.е. Реальные размеры картинки 283 x 149, если посмотреть в свойствах файла в виндовсе, а у меня определяется как 70 x 5...<br>
<br>
Что-то я не пойму никак что не так...]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373444</guid>
        <pubDate>Mon, 11 Dec 2006 16:01:46 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373444</link>
        <description><![CDATA[Rouse_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1373370'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AndNot &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T15:15:16+00:00">11.12.06, 15:15</time></span><div class='quote '>Если есть желание разбираться, то увидишь, про что я все это время толковал</div></div><br>
Спасибо, не нужно :) У меня на сайте тоже есть пример работы :) 32-битные битмапы действительно не содержат палитру, но данные храняться в виде RGBQUAD. Собственно вот пример смешения цветов двух битмапов, где DIBColorSrc указатель на область данных о пикселях загруженного битмапа (надеюсь все в курсе5 что внутри иконки лежат битмапы? :) ):<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">procedure MakeAlphaBlend(DIBColorSrc, DIBDest: PRGBQuad;</div><div class="code_line">&nbsp;&nbsp;const DIBColorSrcSize: Integer); assembler;</div><div class="code_line">asm</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Запоминаем значение регистров в стеке</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;push eax</div><div class="code_line">&nbsp;&nbsp;push ebx</div><div class="code_line">&nbsp;&nbsp;push ecx</div><div class="code_line">&nbsp;&nbsp;push edx</div><div class="code_line">&nbsp;&nbsp;push edi</div><div class="code_line">&nbsp;&nbsp;push esi</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;esi, DIBColorSrc &nbsp; &nbsp; &nbsp; // карта цветов иконки</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;edi, DIBDest &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // карта цветов фона</div><div class="code_line">&nbsp;&nbsp;//mov &nbsp;ecx, DIBColorSrcSize &nbsp; // размер массивов (приходит в ECX сам по себе)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;shr &nbsp;ecx, 2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // размер элемента массива равен четырем,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// поэтому поправим счетчик цикла</div><div class="code_line">&nbsp;</div><div class="code_line">// -----------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">@loop:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// цвета представленны следующим образом</div><div class="code_line">&nbsp;&nbsp;// [esi] &nbsp;= синий</div><div class="code_line">&nbsp;&nbsp;// [esi + 1] &nbsp;= зеленый</div><div class="code_line">&nbsp;&nbsp;// [esi + 2] = красный</div><div class="code_line">&nbsp;&nbsp;// [esi + 3] &nbsp;= альфа канал</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;al, [esi + 3] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// читаем значение альфа канала</div><div class="code_line">&nbsp;&nbsp;cmp &nbsp;al, 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// есть ли изображение иконки в данном пикселе?</div><div class="code_line">&nbsp;&nbsp;jne &nbsp;@paint_full</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;add &nbsp;esi, 4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // если нет - берем следующий элемент</div><div class="code_line">&nbsp;&nbsp;add &nbsp;edi, 4</div><div class="code_line">&nbsp;&nbsp;loop @loop</div><div class="code_line">&nbsp;&nbsp;jmp &nbsp;@done</div><div class="code_line">&nbsp;</div><div class="code_line">// -----------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">@paint_full:</div><div class="code_line">&nbsp;&nbsp;cmp &nbsp;al, 255 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Смотрим интенсивность цвета</div><div class="code_line">&nbsp;&nbsp;jne &nbsp;@paint_alpha</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;eax, [esi] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Данный пиксель полностью заполнен цветом иконки</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;[edi], eax &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // копируем его целиком</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;add &nbsp;esi, 4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // берем следующий элемент</div><div class="code_line">&nbsp;&nbsp;add &nbsp;edi, 4</div><div class="code_line">&nbsp;&nbsp;loop @loop</div><div class="code_line">&nbsp;&nbsp;jmp &nbsp;@done</div><div class="code_line">&nbsp;</div><div class="code_line">// -----------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">@paint_alpha:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// присутствует альфаканал</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;xor &nbsp;ebx, ebx</div><div class="code_line">&nbsp;&nbsp;call @make_alpha &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// микшируем синий цвет</div><div class="code_line">&nbsp;&nbsp;inc &nbsp;ebx</div><div class="code_line">&nbsp;&nbsp;call @make_alpha &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// микшируем зеленый цвет</div><div class="code_line">&nbsp;&nbsp;inc &nbsp;ebx</div><div class="code_line">&nbsp;&nbsp;call @make_alpha &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// микшируем красный цвет</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;add &nbsp;esi, 4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // берем следующий элемент</div><div class="code_line">&nbsp;&nbsp;add &nbsp;edi, 4</div><div class="code_line">&nbsp;&nbsp;loop @loop</div><div class="code_line">&nbsp;&nbsp;jmp &nbsp;@done</div><div class="code_line">&nbsp;</div><div class="code_line">// -----------------------------------------------------------------------------</div><div class="code_line">&nbsp;</div><div class="code_line">@make_alpha:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// функция смешивает два цвета в зависимости от значения EBX,</div><div class="code_line">&nbsp;&nbsp;// которое указывает какой именно брать байт из RGB</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;xor &nbsp;eax, eax</div><div class="code_line">&nbsp;&nbsp;xor &nbsp;edx, edx</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;al, byte [edi + ebx] &nbsp; // берем цвет приемника</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;dl, byte [esi + 3] &nbsp; &nbsp; // берем значение альфаканала</div><div class="code_line">&nbsp;&nbsp;not &nbsp;dl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // значение альфаканала вычитаем из 255</div><div class="code_line">&nbsp;&nbsp;mul &nbsp;dl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // умножаем на получившееся значение</div><div class="code_line">&nbsp;&nbsp;or &nbsp; dl, $FF</div><div class="code_line">&nbsp;&nbsp;div &nbsp;dl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // делим на 255</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;byte [edi + ebx], al &nbsp; // запоминаем первый результат</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;xor &nbsp;eax, eax</div><div class="code_line">&nbsp;&nbsp;xor &nbsp;edx, edx</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;al, byte [esi + ebx] &nbsp; // берем цвет источника</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;dl, byte [esi + 3] &nbsp; &nbsp; // берем значение альфаканала</div><div class="code_line">&nbsp;&nbsp;mul &nbsp;dl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // умножаем на значение альфаканала</div><div class="code_line">&nbsp;&nbsp;or &nbsp; dl, $FF</div><div class="code_line">&nbsp;&nbsp;div &nbsp;dl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // делим на 255</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;xor &nbsp;edx, edx</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;dl, byte [edi + ebx] &nbsp; // читаем первый результат</div><div class="code_line">&nbsp;&nbsp;add &nbsp;ax, dx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // к нему прибавляем второй результат</div><div class="code_line">&nbsp;&nbsp;mov &nbsp;byte [edi + ebx], al &nbsp; // сумму помещаем обратно</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;ret</div><div class="code_line">&nbsp;</div><div class="code_line">// ----------------------------------------------------------------------------- &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">@done:</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Восстановление значений регистров из стека</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;pop &nbsp;esi</div><div class="code_line">&nbsp;&nbsp;pop &nbsp;edi</div><div class="code_line">&nbsp;&nbsp;pop &nbsp;edx</div><div class="code_line">&nbsp;&nbsp;pop &nbsp;ecx</div><div class="code_line">&nbsp;&nbsp;pop &nbsp;ebx</div><div class="code_line">&nbsp;&nbsp;pop &nbsp;eax</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373370</guid>
        <pubDate>Mon, 11 Dec 2006 15:15:16 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1373370</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1372803'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-11T08:27:37+00:00">11.12.06, 08:27</time></span><div class='quote '>Странно, а вот спецификация данного формата говорит что да</div></div><br>
Ну и где здесь сказано что:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1368936'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-07T11:48:12+00:00">07.12.06, 11:48</time></span><div class='quote '>А цвет точки - у структуры PBitmapInfo есть параметр bmiColors, который является массивом структур TRGBQuad в котором и содержиться информация по каждому пикселю</div></div><br>
bmiColors это именно массив палитры (в вышеприведенном файле это - RGBQUAD aColors[]), который у полноцветных отсутствует(в таком случае этого поля просто нет). Цвета точек расположены в массиве &quot;BYTE aBitmapBits[]&quot;, сразу за палитрой(если есть), о чем я и толковал. И даже в большинстве непалитровых битмапов каждая точка хранится в структуре RGBTRIPLE, т.к. 32-х разрядные появились опосля(также как и 16-ти битные).<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;sub &nbsp; &nbsp; esp,size BitmapInfoHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; edx,esp</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ecx,size BitmapCoreHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; esi,edx &nbsp; &nbsp; &nbsp; &nbsp; ; esi &nbsp; - входной буффеp</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,3Fh</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; считали заголовок</div><div class="code_line">&nbsp;&nbsp; &nbsp;__core: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; пpедполагаем что заголовок BitmapCoreHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;movzx &nbsp; ecx,[esi+BitmapCoreHeader.biBitCount]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; [esi+BitmapCoreHeader.biSize],size BitmapCoreHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;je &nbsp; &nbsp; &nbsp;__read_palette</div><div class="code_line">&nbsp;&nbsp; &nbsp;__win: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; заголовок BitmapInfoHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ecx,size BitmapInfoHeader - size BitmapCoreHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,3Fh</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; считываем остаток заголовка</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;movzx &nbsp; ecx,[esi+BitmapInfoHeader.biBitCount]</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; считываем и конвеpтиpуем палитpу (если нам это надо ;-)</div><div class="code_line">&nbsp;&nbsp; &nbsp;__read_palette:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; cl,18h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;je &nbsp; &nbsp; &nbsp;__select_outpnt ; -&#62; pисунок полноцветный,уходим!</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;ecx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; сохpаняем BPP</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; получаем количество цветов</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ebx,1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;shl &nbsp; &nbsp; ebx,cl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; ebx - количество цветов</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; выделяем память под палитpу</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; ecx,[ebx*4]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;Alloc PASCAL,ecx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xchg &nbsp; &nbsp;edx,eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; [esi+BitmapCoreHeader.biSize],size BitmapCoreHeader</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jne &nbsp; &nbsp; __win_pal &nbsp; &nbsp; &nbsp; ; -&#62; виндозный pисунок</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sub &nbsp; &nbsp; ecx,ebx &nbsp; &nbsp; &nbsp; &nbsp; ; ecx - pазмеp палитpы в байтах</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,3Fh</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; считываем палитpу</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; пpеобpазуем в RGBQuad</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xchg &nbsp; &nbsp;ecx,ebx &nbsp; &nbsp; &nbsp; &nbsp; ; ecx - количество цветов</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; ebx - pазмеp палитpы в байтах</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;push &nbsp; &nbsp;esi</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; edi,[edx+ecx*4-4]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; esi,[edx+ebx-3]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; eax,eax</div><div class="code_line">&nbsp;&nbsp; &nbsp;__conv_pal:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;movsw</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lodsb</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;stosw</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;loop &nbsp; &nbsp;__conv_pal</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cld</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; esi</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;jmp &nbsp; &nbsp; short __end_pal</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;__win_pal:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cmp &nbsp; &nbsp; [esi+BitmapInfoHeader.biClrUsed],0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;je &nbsp; &nbsp; &nbsp;__read_pal</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; использована не вся палитpа</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ebx,[esi+BitmapInfoHeader.biClrUsed]</div><div class="code_line">&nbsp;&nbsp; &nbsp;__read_pal:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;shl &nbsp; &nbsp; ebx,2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; ebx - pазмеp палитpы в байтах</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xchg &nbsp; &nbsp;ecx,ebx &nbsp; &nbsp; &nbsp; &nbsp; ; ecx - pазмеp палитpы</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ah,3Fh</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; 21h &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; считываем палитpу</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xchg &nbsp; &nbsp;edx,edi</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;; палитpа обpаботана</div><div class="code_line">&nbsp;&nbsp; &nbsp;__end_pal:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;pop &nbsp; &nbsp; ecx</div></ol></div></div></div></div><br>
Если есть желание разбираться, то увидишь, про что я все это время толковал ;) <br>
Код кстати рабочий. Проверен на сотнях бмпшек всех разновидностей.]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372803</guid>
        <pubDate>Mon, 11 Dec 2006 08:27:37 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372803</link>
        <description><![CDATA[Rouse_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1372464'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>AndNot &#064; <time class="tag-quote__quoted-time" datetime="2006-12-10T20:19:42+00:00">10.12.06, 20:19</time></span><div class='quote '>Разве? Совсем нет.</div></div><br>
Да? Странно, а вот спецификация данного формата говорит что да: <br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Each bitmap file contains a bitmap-file header, a bitmap-information header,<br>
a color table, and an array of bytes that defines the bitmap bits. The file<br>
has the following form:<br>
<br>
BITMAPFILEHEADER bmfh;<br>
BITMAPINFOHEADER bmih;<br>
RGBQUAD          aColors[];<br>
BYTE             aBitmapBits[];<br>
<br>
The bitmap-file header contains information about the type, size, and layout<br>
of a device-independent bitmap file. The header is defined as a<br>
BITMAPFILEHEADER structure.<br>
<br>
The bitmap-information header, defined as a BITMAPINFOHEADER structure,<br>
specifies the dimensions, compression type, and color format for the bitmap.<br>
<br>
The color table, defined as an array of RGBQUAD structures, contains as many<br>
elements as there are colors in the bitmap. The color table is not present<br>
for bitmaps with 24 color bits because each pixel is represented by 24-bit<br>
red-green-blue (RGB) values in the actual bitmap data area. The colors in the<br>
table should appear in order of importance. This helps a display driver<br>
render a bitmap on a device that cannot display as many colors as there are<br>
in the bitmap. If the DIB is in Windows version 3.0 or later format, the<br>
driver can use the biClrImportant member of the BITMAPINFOHEADER structure to<br>
determine which colors are important.</div></div>]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372591</guid>
        <pubDate>Mon, 11 Dec 2006 00:41:57 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372591</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1372538'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>WDaft &#064; <time class="tag-quote__quoted-time" datetime="2006-12-10T22:10:18+00:00">10.12.06, 22:10</time></span><div class='quote '>Битмапа ИХНЕЙ же функцией не знают какой там BPP записан?</div></div><br>
Зачем им это?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1372538'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>WDaft &#064; <time class="tag-quote__quoted-time" datetime="2006-12-10T22:10:18+00:00">10.12.06, 22:10</time></span><div class='quote '>Какого они кроют от нас эту инфу теперь?</div></div><br>
Я переправлю дидюшке биллу ;) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1372538'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>WDaft &#064; <time class="tag-quote__quoted-time" datetime="2006-12-10T22:10:18+00:00">10.12.06, 22:10</time></span><div class='quote '>И ведь всё равно при GetDIBits получается массив именно столько байт на пиксель, сколько в файле - то есть всё правильно.</div></div><br>
И это естественно, поэтому и есть функции преобразования к нужному тебе формату, при этом не обязательно знать уже загруженный, вот и получилась такая хрень. Хотя черт ее знает, может и есть какая апи.]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372538</guid>
        <pubDate>Sun, 10 Dec 2006 22:10:18 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372538</link>
        <description><![CDATA[WDaft: Не так сложно, но разве Микрософтовцы при загрузке Битмапа ИХНЕЙ же функцией не знают какой там BPP записан? Какого они кроют от нас эту инфу теперь?<br>И ведь всё равно при GetDIBits получается массив именно столько байт на пиксель, сколько в файле - то есть всё правильно.]]></description>
        <author>WDaft</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372493</guid>
        <pubDate>Sun, 10 Dec 2006 21:17:16 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372493</link>
        <description><![CDATA[AndNot: Вот и фиг то что не припомню :( А загрузку подобным образом не только я делал, т.ч. может не зря? <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2006-12-10T21:19:38+00:00">10.12.06, 21:19</time></span></span><br>
А разве сложно через заголовок посмотреть BPP?]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372488</guid>
        <pubDate>Sun, 10 Dec 2006 21:10:30 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372488</link>
        <description><![CDATA[WDaft: AndNot, 10x&#33; =)<br>Я предвидел ответ в виде этого метода. И всё же - нет ли WinAPIшного метода для определения битности по HBITMAPу?<br>Или только так?  :huh:]]></description>
        <author>WDaft</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372464</guid>
        <pubDate>Sun, 10 Dec 2006 20:19:42 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372464</link>
        <description><![CDATA[AndNot: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1368936'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2006-12-07T11:48:12+00:00">07.12.06, 11:48</time></span><div class='quote '>А цвет точки - у структуры PBitmapInfo есть параметр bmiColors, который является массивом структур TRGBQuad в котором и содержиться информация по каждому пикселю</div></div><br>
Разве? Совсем нет. И кстати, для полноцветных битмапов данные в файле могут храниться структурах как RGBQUAD так и в RGBTRIPLE (определяется по BITMAPINFOHEADER.biBitCount).<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1372249'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-10T16:03:15+00:00">10.12.06, 16:03</time></span><div class='quote '>Не понятно что это за массив bmiColors</div></div><br>
Массив bmiColors содержится только в неполноцветных файлах, и это не цвета точек, это палитра. Сам массив изображения как правило начинается за массивом bmiColors. Но если рисунок полноцветный, то этот массив в файле отсутствует.<br>
ЗЫ: никогда не вычисляй размер bmiColors через BITMAPINFOHEADER.biBitCount, т.к. если рисунок к примеру 256-ти цветный, то не факт что и записей в палитре будет 256. Как правило меньше. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2006-12-10T20:48:06+00:00">10.12.06, 20:48</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1372440'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>WDaft &#064; <time class="tag-quote__quoted-time" datetime="2006-12-10T19:40:22+00:00">10.12.06, 19:40</time></span><div class='quote '>Как бы мне получить реальный BPP битмапа? То есть то сколько бит на пиксель записано в фаиле?</div></div><br>
Очень просто. Считывай заголовок с помощью BlockRead(sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER)). Затем, если BITMAPINFOHEADER.biBitCount равен 16,24 или 32 то файл не содержит палитры, и размер рассчитывается как (W * H * (biBitCount / 8)).<br>
Если biBitCount равен 1,2,4 или 8 то нужно расчитать размер палитры. Ее размер можешь вычислить как (sizeof(RGBQUAD) * biClrUsed). Сразу за ней и начинается изображение.<br>
А теперь тонкости(мягкотелые без них не могут ;) Заголовок файла бывает двух видов:<br>
BITMAPINFOHEADER и BITMAPCOREHEADER. Если попался CORE, то палитра хранится в формате RGBTRIPLE и ее размер расчитывается по bcBitCount. Это во первых. Во вторых старайся использовать как можно меньше полей заголовка, поскольку встречаются отклонения от стандарта, сам вычисляй. В третьих, палитровые рисунки могут быть сжаты по RLE. В четвертых, заголовки можешь определить по bcSize. В пятых - поле bfSize частенько некорректное, а BITMAPINFOHEADER начинается сразу за BITMAPFILEHEADER. Остальное мелочи ;)]]></description>
        <author>AndNot</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372440</guid>
        <pubDate>Sun, 10 Dec 2006 19:40:22 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372440</link>
        <description><![CDATA[WDaft: Приветствую всех&#33;<br>Мой вопрос почти по этой теме.<br>Дело в том что GetObject воздвращает bmBitsPixel равное текущему BPP десктопа, то есть, например, всегда 32 у меня, так как стоит цвет 32 High Color. Соответсвенно при смене на 16 - даже 24ый битмап опознаётся как 16ый. То есть возвращается то как он конкретно сейчас конкретно на этом Compatible устройстве будет выведен. Но меня это пока не очень интересует.<br>Как бы мне получить реальный BPP битмапа? То есть то сколько бит на пиксель записано в фаиле?<br>(HBITMAP загружается - всё нормально, GetDIBits - работает нормально, то есть возвращает 3 * W * H в случае с 24 битным битмапом.)<br>Неужели надо размер массива полученных точек делить на площадь его?  :lool:]]></description>
        <author>WDaft</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372310</guid>
        <pubDate>Sun, 10 Dec 2006 17:19:08 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372310</link>
        <description><![CDATA[Gonarh: IMHO <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">memDC := GetDC(0);</div></ol></div></div></div></div><br>
<br>
это получение контекста рабочего стола]]></description>
        <author>Gonarh</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372249</guid>
        <pubDate>Sun, 10 Dec 2006 16:03:15 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1372249</link>
        <description><![CDATA[Dmitry_177: Вот если делать через GetDIBits, у меня возникло несколько вопросов:<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">var</div><div class="code_line">&nbsp;&nbsp;memDC: HDC;</div><div class="code_line">&nbsp;&nbsp;hBkgnd: HBITMAP;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;hBkgnd := LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;memDC := GetDC(0);</div><div class="code_line">&nbsp;&nbsp;GetDIBits(memDC, hBkgnd, 0, 0, nil, BMI, DIB_RGB_COLORS);</div><div class="code_line">&nbsp;&nbsp;ReleaseDC(0, memDC);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if (BMI.bmiColors[0].rgbRed = 255) and (BMI.bmiColors[0].rgbGreen = 0) and (BMI.bmiColors[0].rgbBlue = 0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;MessageBox(0, &#39;0 - Красный&#39;, &#39;&#39;, 0);</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
Правильно ли я создаю контекст устройства <strong class='tag-b'>memDC := GetDC(0);</strong>?<br>
<br>
Не понятно что это за массив bmiColors, как так идет счет точек что-то я не пойму, там же всего одно число а не два, например x и y... Объясните пожалуйста..]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1369868</guid>
        <pubDate>Fri, 08 Dec 2006 08:13:38 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1369868</link>
        <description><![CDATA[Krid: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=164008&view=findpost&p=1369173'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Dmitry_177 &#064; <time class="tag-quote__quoted-time" datetime="2006-12-07T14:17:24+00:00">07.12.06, 14:17</time></span><div class='quote '>цвет:<br>
<br>
color := GetPixel(hBmp, x, y);</div></div><br>
Вообще-то GetPixel первым параметром принимает контекст устройства, а не дескриптор bitmap&#39;а.<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">var</div><div class="code_line">&nbsp;bmp, oldbmp:HBITMAP;</div><div class="code_line">&nbsp;bmpInf:BITMAP;</div><div class="code_line">&nbsp;DC,MemDC:HDC;</div><div class="code_line">&nbsp;bWidth,bHeight:integer;</div><div class="code_line">&nbsp;color:COLORREF;</div><div class="code_line">begin</div><div class="code_line">&nbsp;bmp:=LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</div><div class="code_line">&nbsp;DC:=GetDC(0);</div><div class="code_line">&nbsp;MemDC:=CreateCompatibleDC(DC);</div><div class="code_line">&nbsp;oldbmp:=SelectObject(MemDC,bmp);</div><div class="code_line">&nbsp;GetObject(bmp,sizeof(BITMAP),@bmpInf);</div><div class="code_line">&nbsp;bWidth:=bmpInf.bmWidth; &nbsp; &nbsp; &nbsp; // ширина</div><div class="code_line">&nbsp;bHeight:=bmpInf.bmHeight; &nbsp; &nbsp; // высота</div><div class="code_line">&nbsp;color:=GetPixel(MemDC,10,10); // цвет</div><div class="code_line">&nbsp;SelectObject(MemDC,oldbmp);</div><div class="code_line">&nbsp;DeleteDC(MemDC);</div><div class="code_line">&nbsp;ReleaseDC(0,DC);</div><div class="code_line">end;</div></ol></div></div></div></div>]]></description>
        <author>Krid</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1369230</guid>
        <pubDate>Thu, 07 Dec 2006 14:55:19 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1369230</link>
        <description><![CDATA[Rouse_: Может и лучше, но не факт что быстрее :)]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1369173</guid>
        <pubDate>Thu, 07 Dec 2006 14:17:24 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1369173</link>
        <description><![CDATA[Dmitry_177: Я тут так подумал, может лучше так будет?<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">var</div><div class="code_line">&nbsp;&nbsp;size: tagSIZE;</div><div class="code_line">...</div><div class="code_line">GetBitmapDimensionEx(hBmp, size);</div></ol></div></div></div></div><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">color := GetPixel(hBmp, x, y);</div></ol></div></div></div></div>]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1368936</guid>
        <pubDate>Thu, 07 Dec 2006 11:48:12 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1368936</link>
        <description><![CDATA[Rouse_: <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">function PictureSize: TSize;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;ResHandle: HWND;</div><div class="code_line">&nbsp;&nbsp;ResData: HWND;</div><div class="code_line">&nbsp;&nbsp;BMI: PBitmapInfo;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result.cx := 0;</div><div class="code_line">&nbsp;&nbsp;Result.cy := 0;</div><div class="code_line">&nbsp;&nbsp;ResHandle := FindResource(HInstance,</div><div class="code_line">&nbsp;&nbsp; &nbsp;MAKEINTRESOURCE(200), RT_BITMAP);</div><div class="code_line">&nbsp;&nbsp;if ResHandle &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;ResData := LoadResource(HInstance, ResHandle);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ResData &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;BMI := LockResource(ResData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Assigned(BMI) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result.cx := BMI.bmiHeader.biWidth;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result.cy := BMI.bmiHeader.biHeight;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;UnlockResource(ResData);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FreeResource(ResData);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
А цвет точки - у структуры PBitmapInfo есть параметр bmiColors, который является массивом структур TRGBQuad в котором и содержиться информация по каждому пикселю. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2006-12-07T11:49:53+00:00">07.12.06, 11:49</time></span></span><br>
Пардон, у тебя из файла загрузка, тогда через GetDIB получай указатель на PBitmapInfo и по аналогии]]></description>
        <author>Rouse_</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1368859</guid>
        <pubDate>Thu, 07 Dec 2006 11:09:17 +0000</pubDate>
        <title>Высота, ширина, цвет точки HBITMAP-а</title>
        <link>https://forum.sources.ru/index.php?showtopic=164008&amp;view=findpost&amp;p=1368859</link>
        <description><![CDATA[Dmitry_177: Если загрузить битмап из файла в переменную типа HBITMAP так:<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">var</div><div class="code_line">hBmp: HBITMAP;</div><div class="code_line">...</div><div class="code_line">hBmp := LoadImage(0, &#39;1.bmp&#39;, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);</div></ol></div></div></div></div><br>
<br>
Как можно узнать его высоту, ширину, и цвет в какой-то определенной точке не прибегая к модую Graphics?]]></description>
        <author>Dmitry_177</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      </channel>
      </rss>
	