<?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=297623&amp;view=findpost&amp;p=2535217</guid>
        <pubDate>Mon, 15 Mar 2010 18:11:44 +0000</pubDate>
        <title>Загрузка изображений средствами GDI Plus</title>
        <link>https://forum.sources.ru/index.php?showtopic=297623&amp;view=findpost&amp;p=2535217</link>
        <description><![CDATA[Maksim V.: Может быть кому-нибудь пригодиться данный код или он послужит отправной точкой. Аналогия WinApi функции LoadImage без каких-либо примочек, простенько, но свою задачу выполняет. Для одного проекта требовалось поместить на STATIC PNG изображение, пришлось написать такой вот код.<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">unit F_GdipImg;</div><div class="code_line">&nbsp;</div><div class="code_line">{</div><div class="code_line">GdipLoadImage(hInstance, MAKEINTRESOURCEW(RC_IMAGE), TYPE_RCDATA, GetSysColor(COLOR_BTNFACE));</div><div class="code_line">GdipLoadImage(hInstance, MAKEINTRESOURCEW(RC_IMAGE), TYPE_PNG, GetSysColor(COLOR_BTNFACE));</div><div class="code_line">GdipLoadImage(hInstance, MAKEINTRESOURCEW(RC_IMAGE), TYPE_GIF, GetSysColor(COLOR_BTNFACE));</div><div class="code_line">GdipLoadImage(hInstance, MAKEINTRESOURCEW(RC_IMAGE), TYPE_JPEG, GetSysColor(COLOR_BTNFACE));</div><div class="code_line">GdipLoadImage(0, &#39;C:\Image.png&#39;, TYPE_SHARED, GetSysColor(COLOR_BTNFACE));</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, F_GdiPlus, F_IStream;</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;TYPE_RCDATA = 1;</div><div class="code_line">&nbsp;&nbsp;TYPE_PNG &nbsp; &nbsp;= 2;</div><div class="code_line">&nbsp;&nbsp;TYPE_GIF &nbsp; &nbsp;= 3;</div><div class="code_line">&nbsp;&nbsp;TYPE_JPEG &nbsp; = 4;</div><div class="code_line">&nbsp;&nbsp;TYPE_SHARED = 5;</div><div class="code_line">&nbsp;</div><div class="code_line">function GdipLoadImage(hinst: HMODULE; lpszName: PWideChar; uType: UINT; RgbClr: TColorRef): HBITMAP;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">//</div><div class="code_line">&nbsp;</div><div class="code_line">function GdipLoadImage(hinst: HMODULE; lpszName: PWideChar; uType: UINT; RgbClr: TColorRef): HBITMAP;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;hRes &nbsp; &nbsp; : HRSRC;</div><div class="code_line">&nbsp;&nbsp;dwResSize: DWORD;</div><div class="code_line">&nbsp;&nbsp;hResLoad : HGLOBAL;</div><div class="code_line">&nbsp;&nbsp;lpResLock: Pointer;</div><div class="code_line">&nbsp;&nbsp;hMem &nbsp; &nbsp; : HGLOBAL;</div><div class="code_line">&nbsp;&nbsp;pData &nbsp; &nbsp;: Pointer;</div><div class="code_line">&nbsp;&nbsp;hr &nbsp; &nbsp; &nbsp; : HRESULT;</div><div class="code_line">&nbsp;&nbsp;pStream &nbsp;: IStream;</div><div class="code_line">&nbsp;&nbsp;Bitmap &nbsp; : TGpImage;</div><div class="code_line">&nbsp;&nbsp;hGlob &nbsp; &nbsp;: HGLOBAL;</div><div class="code_line">&nbsp;&nbsp;lpszType : PWideChar;</div><div class="code_line">begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Result := 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;case uType of</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TYPE_SHARED:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;GdipLoadImageFromFile(lpszName, Bitmap);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (Bitmap &#60;&#62; nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GdipCreateHBITMAPFromBitmap(Bitmap, Result, ColorRefToARGB(RgbClr));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// GdipLoadImageFromFile.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GdipDisposeImage(Bitmap);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;case uType of</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TYPE_RCDATA: lpszType := MAKEINTRESOURCEW(RT_RCDATA);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TYPE_PNG &nbsp; : lpszType := &#39;PNG&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TYPE_GIF &nbsp; : lpszType := &#39;GIF&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TYPE_JPEG &nbsp;: lpszType := &#39;JPEG&#39;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;hRes := FindResourceW(hinst, lpszName, lpszType);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (hRes &#60;&#62; 0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dwResSize := SizeofResource(hinst, hRes);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (dwResSize &#60;&#62; 0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hResLoad := LoadResource(hinst, hRes);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (hResLoad &#60;&#62; 0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lpResLock := LockResource(hResLoad);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (lpResLock &#60;&#62; nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hMem := GlobalAlloc(GMEM_MOVEABLE, dwResSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (hMem &#60;&#62; 0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pData := GlobalLock(hMem);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (pData &#60;&#62; nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// если передать TRUE в CreateStreamOnHGlobal, то поток сам</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// освободит выделенную память и не потребуется использовать</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// GetHGlobalFromStream.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CopyMemory(pData, lpResLock, dwResSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStream := nil;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hr := CreateStreamOnHGlobal(hMem, FALSE, pStream);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (hr = S_OK) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GdipLoadImageFromStream(pStream, Bitmap);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Bitmap &#60;&#62; nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GdipCreateHBITMAPFromBitmap(Bitmap, Result, ColorRefToARGB(RgbClr));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// GdipLoadImageFromStream.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GdipDisposeImage(Bitmap);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// CreateStreamOnHGlobal.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hr := GetHGlobalFromStream(pStream, hGlob);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (hr = S_OK) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GlobalFree(hGlob);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStream := nil;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// GlobalLock.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// GlobalAlloc.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GlobalUnlock(hMem);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GlobalFree(hMem);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// LockResource.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;UnlockResource(HGLOBAL(lpResLock));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// LoadResource.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FreeResource(hResLoad);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// SizeofResource.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// FindResource.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Maksim V.</author>
        <category>Графика, звук, анимация, игры</category>
      </item>
	
      </channel>
      </rss>
	