<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - WINE/Разработчику/Изображения</title>
<link>http://freesource.info/wiki/WINE/Разработчику/Изображения</link>
<description>History/revisions of FreeSource/WINE/Разработчику/Изображения</description>
<language>en-us</language>
<item>
<title>2005-12-10 02:16:44</title>
<link>http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija/show?time=2005-12-10+02%3A16%3A44</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".wine.razrabotchiku.izobrazhenija" href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija&amp;" class="">/WINE&amp;nbsp;/&amp;nbsp;Разработчику&amp;nbsp;/&amp;nbsp;Изображения&lt;/a> за &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-12-10+02%3A16%3A44">2005-12-10 02:16:44&lt;/a> и &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija">2006-02-13 23:32:56&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;hr noshade="noshade" size="1" />
&lt;a name=".cyrilmargorin" href="http://freesource.info/wiki/CyrilMargorin&amp;" class="" title="Cyril&amp;nbsp;Margorin">CyrilMargorin&lt;/a> /13.02.2006 23:32/&lt;br />
После дальнейшего исследования проблемы с&amp;nbsp;пропавшей заставкой в&lt;br />
Компасе выяснилось, что&amp;nbsp;проблема состоит в&amp;nbsp;том, что&amp;nbsp;функция &lt;span class="missingpage">Get&amp;nbsp;DI&amp;nbsp;Bits&lt;/span>&lt;a href="http://freesource.info/wiki/GetDIBits/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;br />
возвращает &amp;laquo;черную&amp;raquo; картинку.&lt;br />
При&amp;nbsp;этом, компиляция wine с&amp;nbsp;выключенной поддержкой Shared Memory&lt;br />
картинку проявило.&lt;br />
Таким образом наткнулись на&amp;nbsp;следующий момент&lt;br />
Есть следующий код: &lt;br />
dlls/x11drv/dib.c функция X11DRV_DIB_GetImageBits&lt;br />
&lt;div class="indent"> XImage *bmpImage;&lt;br />
 wine_tsx11_lock();&lt;br />
if&amp;nbsp;(descr-&amp;gt;image)&lt;br />
&lt;div class="indent">&lt;div class="indent"> bmpImage = descr-&amp;gt;image;&lt;br />
&lt;/div>&lt;/div> else {&lt;br />
&lt;div class="indent">&lt;div class="indent"> bmpImage = XCreateImage( gdi_display, visual, descr-&amp;gt;depth, ZPixmap, 0, NULL,&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">descr-&amp;gt;infoWidth, lines, 32, 0 );&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> bmpImage-&amp;gt;data = calloc( lines, bmpImage-&amp;gt;bytes_per_line );&lt;br />
 if(bmpImage-&amp;gt;data == NULL) {&lt;br />
&lt;div class="indent">&lt;div class="indent"> ERR(&amp;laquo;Out of&amp;nbsp;memory!\n&amp;raquo;);&lt;br />
 XDestroyImage( bmpImage );&lt;br />
 wine_tsx11_unlock();&lt;br />
 return lines;&lt;br />
&lt;/div>&lt;/div> }&lt;br />
&lt;/div>&lt;/div> }&lt;/div>
#ifdef HAVE_LIBXXSHM&lt;br />
&lt;div class="indent"> if&amp;nbsp;(descr-&amp;gt;image &amp;&amp; descr-&amp;gt;useShm)&lt;br />
 {&lt;br />
&lt;div class="indent">&lt;div class="indent"> int&amp;nbsp;saveRed, saveGreen, saveBlue;&lt;br />
 TRACE(&amp;laquo;XShmGetImage(%p, %ld, %p, %d, %d, %ld)\n&amp;raquo;,&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> gdi_display, descr-&amp;gt;drawable, bmpImage,&lt;br />
 descr-&amp;gt;xSrc, descr-&amp;gt;ySrc, &lt;span class="missingpage">All&amp;nbsp;Planes&lt;/span>&lt;a href="http://freesource.info/wiki/AllPlanes/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>);&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> saveRed = bmpImage-&amp;gt;red_mask;&lt;br />
 saveBlue= bmpImage-&amp;gt;blue_mask;&lt;br />
 saveGreen = bmpImage-&amp;gt;green_mask;&lt;br />
 XShmGetImage( gdi_display, descr-&amp;gt;drawable, bmpImage,&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> descr-&amp;gt;xSrc, descr-&amp;gt;ySrc, &lt;span class="missingpage">All&amp;nbsp;Planes&lt;/span>&lt;a href="http://freesource.info/wiki/AllPlanes/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>);&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> bmpImage-&amp;gt;red_mask = saveRed;&lt;br />
 bmpImage-&amp;gt;blue_mask = saveBlue;&lt;br />
 bmpImage-&amp;gt;green_mask = saveGreen;&lt;br />
&lt;/div>&lt;/div> }&lt;br />
 else&lt;/div>
#endif /* HAVE_LIBXXSHM */&lt;br />
&lt;div class="indent"> {&lt;br />
&lt;div class="indent">&lt;div class="indent"> TRACE(&amp;laquo;XGetSubImage(%p,%ld,%d,%d,%d,%d,%ld,%d,%p,%d,%d)\n&amp;raquo;,&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> gdi_display, descr-&amp;gt;drawable, descr-&amp;gt;xSrc, descr-&amp;gt;ySrc, descr-&amp;gt;width,&lt;br />
 lines, &lt;span class="missingpage">All&amp;nbsp;Planes&lt;/span>&lt;a href="http://freesource.info/wiki/AllPlanes/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>, ZPixmap, bmpImage, descr-&amp;gt;xDest, descr-&amp;gt;yDest);&lt;br />
&lt;/div>&lt;/div>&lt;/div> XGetSubImage( gdi_display, descr-&amp;gt;drawable, descr-&amp;gt;xSrc, descr-&amp;gt;ySrc,&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> descr-&amp;gt;width, lines, &lt;span class="missingpage">All&amp;nbsp;Planes&lt;/span>&lt;a href="http://freesource.info/wiki/AllPlanes/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>, ZPixmap,&lt;br />
 bmpImage, descr-&amp;gt;xDest, descr-&amp;gt;yDest );&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div> }&lt;/div>
В&amp;nbsp;случае, если descr-&amp;gt;image равен нулю, создается новый XImage, без&amp;nbsp;поддержки Shared Memory, но&amp;nbsp;если был&amp;nbsp;передан параметр useShm, для&amp;nbsp;получения XImage из&amp;nbsp;Pixmap используется функция с&amp;nbsp;поддержкой Shared Memory, которая есстественно не&amp;nbsp;срабатывает в&amp;nbsp;данном случае. (Схожий код&amp;nbsp;исспользуется в&amp;nbsp;X11DRV_DIB_SetImageBits).&lt;br />
Таким образом, первый патч заключается в&amp;nbsp;проверке, создавалася ли&amp;nbsp;XImage локально, или&amp;nbsp;исспользовался внешний?&lt;br />
RCS&amp;nbsp;file: /home/wine/wine/dlls/x11drv/dib.c,v&lt;br />
retrieving revision 1.49&lt;br />
retrieving revision 1.50&lt;br />
diff -u -p -r1.49 -r1.50&lt;br />
&lt;br />
wine/dlls/x11drv/dib.c	2006/02/13 13:09:31	1.49&lt;br />
+++ wine/dlls/x11drv/dib.c	2006/02/13 13:09:49	1.50&lt;br />
@@ -3626,7 +3626,7 @@ static int&amp;nbsp;X11DRV_DIB_SetImageBits( cons&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">descr-&amp;gt;xSrc, descr-&amp;gt;ySrc, descr-&amp;gt;xDest, descr-&amp;gt;yDest,&lt;br />
descr-&amp;gt;width, descr-&amp;gt;height);&lt;/div>&lt;/div>&lt;/div>
 #ifdef HAVE_LIBXXSHM&lt;br />
&amp;ndash;    if&amp;nbsp;(descr-&amp;gt;useShm)&lt;br />
+    if&amp;nbsp;(descr-&amp;gt;image &amp;&amp; descr-&amp;gt;useShm)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> XShmPutImage( gdi_display, descr-&amp;gt;drawable, descr-&amp;gt;gc, bmpImage,&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> descr-&amp;gt;xSrc, descr-&amp;gt;ySrc, descr-&amp;gt;xDest, descr-&amp;gt;yDest,&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
@@ -3670,7 +3670,7 @@ static int&amp;nbsp;X11DRV_DIB_GetImageBits( cons&lt;br />
 &lt;br />
 #ifdef HAVE_LIBXXSHM&lt;br />
&amp;ndash;    if&amp;nbsp;(descr-&amp;gt;useShm)&lt;br />
+    if&amp;nbsp;(descr-&amp;gt;image &amp;&amp; descr-&amp;gt;useShm)&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> int&amp;nbsp;saveRed, saveGreen, saveBlue;&lt;/div>&lt;/div>&lt;/div>&lt;/div>
&lt;span class="mark">Внимание вопрос: А&amp;nbsp;может быть имеет смысл попытаться создать Shared Memory XImage? Или&amp;nbsp;эта операция недостаточно быстрая и&amp;nbsp;будет тормозить систему&lt;/span>?&lt;br />
Второй момент:&lt;br />
В&amp;nbsp;функции X11DRV_GetDIBits при&amp;nbsp;заполнении структуры X11DRV_DIB_IMAGEBITS_DESCR descr в&amp;nbsp;поле image записывался NULL. Соответственно было изменено на&amp;nbsp;существующий XImage из&amp;nbsp;physBitmap.&lt;br />
RCS&amp;nbsp;file: /home/wine/wine/dlls/x11drv/dib.c,v&lt;br />
retrieving revision 1.48&lt;br />
retrieving revision 1.49&lt;br />
diff -u -p -r1.48 -r1.49&lt;br />
&lt;br />
wine/dlls/x11drv/dib.c	2005/12/13 18:25:52	1.48&lt;br />
+++ wine/dlls/x11drv/dib.c	2006/02/13 13:09:31	1.49&lt;br />
@@ -4080,7 +4080,7 @@ INT&amp;nbsp;X11DRV_GetDIBits( X11DRV_PDEVICE *ph&lt;br />
&lt;div class="indent"> descr.physDev   = physDev;&lt;br />
 descr.palentry  = palette;&lt;br />
 descr.bits      = bits;&lt;/div>
&amp;ndash;  descr.image     = NULL;&lt;br />
+  descr.image     = physBitmap-&amp;gt;image;&lt;br />
&lt;div class="indent"> descr.infoWidth = width;&lt;br />
 descr.lines     = lines;&lt;br />
 descr.depth     = physBitmap-&amp;gt;pixmap_depth;&lt;/div>
&lt;span class="mark">Внимание вопрос: А&amp;nbsp;в функции X11DRV_SetDIBits тоже наверно надо передавать image из&amp;nbsp;physBitmap&lt;/span>?&lt;br />
Оба&amp;nbsp;патча вошли в&amp;nbsp;репозиторий cvs.winehq.org 13 февраля 2006.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a  href="http://freesource.info/wiki/CyrilMargorin&amp;" class="" title="Cyril&amp;nbsp;Margorin">CyrilMargorin&lt;/a> /10.12.2005 02:16/&lt;br />
Тем&amp;nbsp;временем найдена новая беда...&lt;br />
После запуска &amp;laquo;Компас&amp;raquo;а, при&amp;nbsp;попытки создать деталь (Part) вылетаем с&amp;nbsp;новым exception:&lt;br />
wine: Unhandled page fault on&amp;nbsp;read access to&amp;nbsp;0x7c2c8620 at&amp;nbsp;address 0x42175ad6 (thread 0018), starting debugger...&lt;br />
&lt;span class="missingpage">Wine&amp;nbsp;Dbg&lt;/span>&lt;a href="http://freesource.info/wiki/WineDbg/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> starting on&amp;nbsp;pid 0x17&lt;br />
Unhandled exception: page fault on&amp;nbsp;read access to&amp;nbsp;0x7c2c8620 in&amp;nbsp;32-bit code (0x42175ad6).&lt;br />
In&amp;nbsp;32 bit&amp;nbsp;mode.&lt;br />
Register dump:&lt;br />
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:00c7&lt;br />
 EIP:42175ad6 ESP:4067e650 EBP:4067e668 EFLAGS:00210246(   &amp;ndash; 00      -RIZP1)&lt;br />
 EAX:00000000 EBX:4221ec18 ECX:7c2c8620 EDX:00000000&lt;br />
 ESI:7c042e68 EDI:7c29bf00&lt;br />
Stack dump:&lt;br />
0x4067e650:  00000000 4067e664 407f80c5 420fe08c&lt;br />
0x4067e660:  00000040 7c042e68 4067e698 420c9db6&lt;br />
0x4067e670:  7c042e68 00000040 000000f7 bfe2ca00&lt;br />
0x4067e680:  080c7575 00002800 45f8fc90 420fe08c&lt;br />
0x4067e690:  45f8fc90 7c042e68 4067e6f8 420ca22f&lt;br />
0x4067e6a0:  00000040 000000f7 00000000 00000000&lt;br />
Backtrace:&lt;br />
=&amp;gt;1 0x42175ad6 in&amp;nbsp;libx11.so.6 (+0x20ad6) (0x42175ad6)&lt;br />
&lt;div class="indent">2 0x420c9db6 X11DRV_InternalFloodFill+0x36(x=0x40, y=0xf7, xOrg=0x0, yOrg=0x0, pixel=0x0, fillType=0x0) [/home/cyril/prj/wine/dlls/x11drv/graphics.c:1223] in&amp;nbsp;winex11.drv (0x420c9db6)&lt;br />
3 0x420ca22f X11DRV_ExtFloodFill+0x19f(physDev=0x45f8fc90, x=0x2, y=0x2, color=0x0, fillType=0x0) [/home/cyril/prj/wine/dlls/x11drv/graphics.c:1322] in&amp;nbsp;winex11.drv (0x420ca22f)&lt;br />
4 0x40801467 &lt;span class="missingpage">Ext&amp;nbsp;Flood&amp;nbsp;Fill&lt;/span>&lt;a href="http://freesource.info/wiki/ExtFloodFill/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(hdc=0x5be4, x=0x2, y=0x2, color=0x0, fillType=0x0) [/home/cyril/prj/wine/dlls/gdi/painting.c:671] in&amp;nbsp;gdi32 (0x40801467)&lt;br />
5 0x40801497 &lt;span class="missingpage">Flood&amp;nbsp;Fill&lt;/span>&lt;a href="http://freesource.info/wiki/FloodFill/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>+0x27(hdc=0x5be4, x=0x2, y=0x2, color=0x0) [/home/cyril/prj/wine/dlls/gdi/painting.c:684] in&amp;nbsp;gdi32 (0x40801497)&lt;/div>
fixme:dbghelp:sffip_cb NIY&amp;nbsp;on&amp;nbsp;'J:\KOMPAS\8_0\Release\LT\Exe\kl3DAppA.pdb'&lt;br />
&lt;div class="indent">6 0x4366b26b in&amp;nbsp;kl3dappa (+0xb26b) (0x4366b26b)&lt;br />
7 0x00000000 (0x00000000)&lt;/div>
0x42175ad6: movl        0x0(%ecx),%edx&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-12-10 01:38:50</title>
<link>http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija/show?time=2005-12-10+01%3A38%3A50</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija&amp;" class="">/WINE&amp;nbsp;/&amp;nbsp;Разработчику&amp;nbsp;/&amp;nbsp;Изображения&lt;/a> за &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-12-10+01%3A38%3A50">2005-12-10 01:38:50&lt;/a> и &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-12-10+02%3A16%3A44">2005-12-10 02:16:44&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a  href="http://freesource.info/wiki/CyrilMargorin&amp;" class="" title="Cyril&amp;nbsp;Margorin">CyrilMargorin&lt;/a> /10.12.2005 02:16/&lt;br />
Тем&amp;nbsp;временем найдена новая беда...&lt;br />
После запуска &amp;laquo;Компас&amp;raquo;а, при&amp;nbsp;попытки создать деталь (Part) вылетаем с&amp;nbsp;новым exception:&lt;br />
wine: Unhandled page fault on&amp;nbsp;read access to&amp;nbsp;0x7c2c8620 at&amp;nbsp;address 0x42175ad6 (thread 0018), starting debugger...&lt;br />
&lt;span class="missingpage">Wine&amp;nbsp;Dbg&lt;/span>&lt;a href="http://freesource.info/wiki/WineDbg/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> starting on&amp;nbsp;pid 0x17&lt;br />
Unhandled exception: page fault on&amp;nbsp;read access to&amp;nbsp;0x7c2c8620 in&amp;nbsp;32-bit code (0x42175ad6).&lt;br />
In&amp;nbsp;32 bit&amp;nbsp;mode.&lt;br />
Register dump:&lt;br />
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:00c7&lt;br />
 EIP:42175ad6 ESP:4067e650 EBP:4067e668 EFLAGS:00210246(   &amp;ndash; 00      -RIZP1)&lt;br />
 EAX:00000000 EBX:4221ec18 ECX:7c2c8620 EDX:00000000&lt;br />
 ESI:7c042e68 EDI:7c29bf00&lt;br />
Stack dump:&lt;br />
0x4067e650:  00000000 4067e664 407f80c5 420fe08c&lt;br />
0x4067e660:  00000040 7c042e68 4067e698 420c9db6&lt;br />
0x4067e670:  7c042e68 00000040 000000f7 bfe2ca00&lt;br />
0x4067e680:  080c7575 00002800 45f8fc90 420fe08c&lt;br />
0x4067e690:  45f8fc90 7c042e68 4067e6f8 420ca22f&lt;br />
0x4067e6a0:  00000040 000000f7 00000000 00000000&lt;br />
Backtrace:&lt;br />
=&amp;gt;1 0x42175ad6 in&amp;nbsp;libx11.so.6 (+0x20ad6) (0x42175ad6)&lt;br />
&lt;div class="indent">2 0x420c9db6 X11DRV_InternalFloodFill+0x36(x=0x40, y=0xf7, xOrg=0x0, yOrg=0x0, pixel=0x0, fillType=0x0) [/home/cyril/prj/wine/dlls/x11drv/graphics.c:1223] in&amp;nbsp;winex11.drv (0x420c9db6)&lt;br />
3 0x420ca22f X11DRV_ExtFloodFill+0x19f(physDev=0x45f8fc90, x=0x2, y=0x2, color=0x0, fillType=0x0) [/home/cyril/prj/wine/dlls/x11drv/graphics.c:1322] in&amp;nbsp;winex11.drv (0x420ca22f)&lt;br />
4 0x40801467 &lt;span class="missingpage">Ext&amp;nbsp;Flood&amp;nbsp;Fill&lt;/span>&lt;a href="http://freesource.info/wiki/ExtFloodFill/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(hdc=0x5be4, x=0x2, y=0x2, color=0x0, fillType=0x0) [/home/cyril/prj/wine/dlls/gdi/painting.c:671] in&amp;nbsp;gdi32 (0x40801467)&lt;br />
5 0x40801497 &lt;span class="missingpage">Flood&amp;nbsp;Fill&lt;/span>&lt;a href="http://freesource.info/wiki/FloodFill/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>+0x27(hdc=0x5be4, x=0x2, y=0x2, color=0x0) [/home/cyril/prj/wine/dlls/gdi/painting.c:684] in&amp;nbsp;gdi32 (0x40801497)&lt;/div>
fixme:dbghelp:sffip_cb NIY&amp;nbsp;on&amp;nbsp;'J:\KOMPAS\8_0\Release\LT\Exe\kl3DAppA.pdb'&lt;br />
&lt;div class="indent">6 0x4366b26b in&amp;nbsp;kl3dappa (+0xb26b) (0x4366b26b)&lt;br />
7 0x00000000 (0x00000000)&lt;/div>
0x42175ad6: movl        0x0(%ecx),%edx&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-11-25 18:08:43</title>
<link>http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija/show?time=2005-11-25+18%3A08%3A43</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija&amp;" class="">/WINE&amp;nbsp;/&amp;nbsp;Разработчику&amp;nbsp;/&amp;nbsp;Изображения&lt;/a> за &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-11-25+18%3A08%3A43">2005-11-25 18:08:43&lt;/a> и &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-12-10+01%3A38%3A50">2005-12-10 01:38:50&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;hr noshade="noshade" size="1" />
&lt;a  href="http://freesource.info/wiki/CyrilMargorin&amp;" class="" title="Cyril&amp;nbsp;Margorin">CyrilMargorin&lt;/a> /10.12.2005 01:38/&lt;br />
Появилась для&amp;nbsp;обсуждение идея, перевести функцию CopyImage с&amp;nbsp;Get/SetBitmapBits на&amp;nbsp;Get/SetDIBits. Попытка сделать это&amp;nbsp;в&amp;nbsp;общем-то была успешна....&lt;br />
Index: dlls/user/cursoricon.c&lt;br />
RCS&amp;nbsp;file: /home/wine/wine/dlls/user/cursoricon.c,v&lt;br />
retrieving revision 1.22&lt;br />
diff -u -r1.22 cursoricon.c&lt;br />
&lt;br />
dlls/user/cursoricon.c      5 Dec&amp;nbsp;2005 20:07:34 -0000       1.22&lt;br />
+++ dlls/user/cursoricon.c      9 Dec&amp;nbsp;2005 22:29:21 -0000&lt;br />
@@ -2322,14 +2322,39 @@&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> if&amp;nbsp;(!&lt;span class="missingpage">Get&amp;nbsp;Object&amp;nbsp;W&lt;/span>&lt;a href="http://freesource.info/wiki/GetObjectW/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( hnd, sizeof(bm), &amp;bm )) return 0;&lt;br />
 bm.bmBits = NULL;&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
&amp;ndash;            if&amp;nbsp;CreateBitmapIndirect(&amp;bm)&lt;br />
&amp;ndash;            {&lt;br />
&amp;ndash;                char *buf = &lt;span class="missingpage">Heap&amp;nbsp;Alloc&lt;/span>&lt;a href="http://freesource.info/wiki/HeapAlloc/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( &lt;span class="missingpage">Get&amp;nbsp;Process&amp;nbsp;Heap&lt;/span>&lt;a href="http://freesource.info/wiki/GetProcessHeap/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(), 0, bm.bmWidthBytes * bm.bmHeight );&lt;br />
&amp;ndash;                &lt;span class="missingpage">Get&amp;nbsp;Bitmap&amp;nbsp;Bits&lt;/span>&lt;a href="http://freesource.info/wiki/GetBitmapBits/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( hnd, bm.bmWidthBytes * bm.bmHeight, buf&amp;nbsp;);&lt;br />
&amp;ndash;                &lt;span class="missingpage">Set&amp;nbsp;Bitmap&amp;nbsp;Bits&lt;/span>&lt;a href="http://freesource.info/wiki/SetBitmapBits/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( res, bm.bmWidthBytes * bm.bmHeight, buf&amp;nbsp;);&lt;br />
&amp;ndash;                &lt;span class="missingpage">Heap&amp;nbsp;Free&lt;/span>&lt;a href="http://freesource.info/wiki/HeapFree/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( &lt;span class="missingpage">Get&amp;nbsp;Process&amp;nbsp;Heap&lt;/span>&lt;a href="http://freesource.info/wiki/GetProcessHeap/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(), 0, buf&amp;nbsp;);&lt;br />
&amp;ndash;            }&lt;br />
&amp;ndash;            return (HICON)res;&lt;br />
+           if&amp;nbsp;(!screen_dc) screen_dc = &lt;span class="missingpage">Create&amp;nbsp;DCW&lt;/span>&lt;a href="http://freesource.info/wiki/CreateDCW/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( DISPLAYW, NULL, NULL, NULL );&lt;br />
+           if&amp;nbsp;(screen_dc)&lt;br />
+           {&lt;br />
+               ifCreateCompatibleBitmap(screen_dc,bm.bmWidth,bm.bmHeight)&lt;br />
+               {&lt;br />
+                   BITMAPINFO* pbmi;&lt;br />
+                   char *buf;&lt;br />
+                   char *bmibuf;&lt;br />
+                   int&amp;nbsp;nColor=0;&lt;br />
+                   if(bm.bmBitsPixel &amp;lt;= 8)&lt;br />
+                       nColor = 1&amp;lt;&amp;lt;bm.bmBitsPixel;&lt;br />
+                   if(bm.bmBitsPixel == 15 || bm.bmBitsPixel == 16)&lt;br />
+                       nColor = 3;&lt;br />
+                   bmibuf = &lt;span class="missingpage">Heap&amp;nbsp;Alloc&lt;/span>&lt;a href="http://freesource.info/wiki/HeapAlloc/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( &lt;span class="missingpage">Get&amp;nbsp;Process&amp;nbsp;Heap&lt;/span>&lt;a href="http://freesource.info/wiki/GetProcessHeap/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(), 0, sizeof(BITMAPINFOHEADER)+nColor*sizeof(RGBQUAD));&lt;br />
+                   pbmi = (BITMAPINFO*)bmibuf;&lt;br />
+                   &lt;span class="missingpage">Zero&amp;nbsp;Memory&lt;/span>&lt;a href="http://freesource.info/wiki/ZeroMemory/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(pbmi,sizeof(BITMAPINFOHEADER)+nColor*sizeof(RGBQUAD));&lt;br />
+                   pbmi-&amp;gt;bmiHeader.biSize = sizeof(pbmi-&amp;gt;bmiHeader);&lt;br />
+                   pbmi-&amp;gt;bmiHeader.biWidth = bm.bmWidth;&lt;br />
+                   pbmi-&amp;gt;bmiHeader.biHeight = bm.bmHeight;&lt;br />
+                   pbmi-&amp;gt;bmiHeader.biPlanes = bm.bmPlanes;&lt;br />
+                   pbmi-&amp;gt;bmiHeader.biBitCount = bm.bmBitsPixel;&lt;br />
+                   pbmi-&amp;gt;bmiHeader.biCompression = BI_RGB;&lt;br />
+                   buf&amp;nbsp;= &lt;span class="missingpage">Heap&amp;nbsp;Alloc&lt;/span>&lt;a href="http://freesource.info/wiki/HeapAlloc/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( &lt;span class="missingpage">Get&amp;nbsp;Process&amp;nbsp;Heap&lt;/span>&lt;a href="http://freesource.info/wiki/GetProcessHeap/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(), 0, bm.bmWidthBytes * bm.bmHeight );&lt;br />
+                   &lt;span class="missingpage">Get&amp;nbsp;DI&amp;nbsp;Bits&lt;/span>&lt;a href="http://freesource.info/wiki/GetDIBits/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(screen_dc,hnd,0,bm.bmHeight,buf,pbmi,DIB_RGB_COLORS);&lt;br />
+                   &lt;span class="missingpage">Set&amp;nbsp;DI&amp;nbsp;Bits&lt;/span>&lt;a href="http://freesource.info/wiki/SetDIBits/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(screen_dc,res,0,bm.bmHeight,buf,pbmi,DIB_RGB_COLORS);&lt;br />
+                   &lt;span class="missingpage">Heap&amp;nbsp;Free&lt;/span>&lt;a href="http://freesource.info/wiki/HeapFree/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( &lt;span class="missingpage">Get&amp;nbsp;Process&amp;nbsp;Heap&lt;/span>&lt;a href="http://freesource.info/wiki/GetProcessHeap/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(), 0, bmibuf );&lt;br />
+                   &lt;span class="missingpage">Heap&amp;nbsp;Free&lt;/span>&lt;a href="http://freesource.info/wiki/HeapFree/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>( &lt;span class="missingpage">Get&amp;nbsp;Process&amp;nbsp;Heap&lt;/span>&lt;a href="http://freesource.info/wiki/GetProcessHeap/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>(), 0, buf&amp;nbsp;);&lt;br />
+               }&lt;br />
+               return (HICON)res;&lt;br />
+           }&lt;br />
+           /* In&amp;nbsp;case of&amp;nbsp;error it&amp;nbsp;should return 0&lt;br />
+            */&lt;br />
+           return 0;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> }&lt;br />
 case IMAGE_ICON:&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent"> return CURSORICON_ExtCopy(hnd,type, desiredx, desiredy, flags);&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-11-18 20:35:02</title>
<link>http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija/show?time=2005-11-18+20%3A35%3A02</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija&amp;" class="">/WINE&amp;nbsp;/&amp;nbsp;Разработчику&amp;nbsp;/&amp;nbsp;Изображения&lt;/a> за &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-11-18+20%3A35%3A02">2005-11-18 20:35:02&lt;/a> и &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-11-25+18%3A08%3A43">2005-11-25 18:08:43&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">//Похоже надо через таблицу цветов превращать из&amp;nbsp;24х битовой в&amp;nbsp;4х битовую....&lt;br />
При&amp;nbsp;этом надо учитывать, что&amp;nbsp;кроме 24х битового дисплея бывает еще&amp;nbsp;и&amp;nbsp;32 и&amp;nbsp;16.... а&amp;nbsp;иногда и&amp;nbsp;8ми.....&lt;br />
В&amp;nbsp;теории можно повнимательней просмотреть код&amp;nbsp;около функции X11_GetDIBits() (или как&amp;nbsp;то&amp;nbsp;так она&amp;nbsp;называется) и&amp;nbsp;еще (скорее всего) необходимо сделать схожие изменения в&amp;nbsp;функции X11_SetBitmapBits...//&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-10-13 03:31:52</title>
<link>http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija/show?time=2005-10-13+03%3A31%3A52</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija&amp;" class="">/WINE&amp;nbsp;/&amp;nbsp;Разработчику&amp;nbsp;/&amp;nbsp;Изображения&lt;/a> за &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-10-13+03%3A31%3A52">2005-10-13 03:31:52&lt;/a> и &lt;a href="http://freesource.info/wiki/WINE/Razrabotchiku/Izobrazhenija?time=2005-11-18+20%3A35%3A02">2005-11-18 20:35:02&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h1301-1">&lt;/a>&lt;h1> Проблемы с&amp;nbsp;изображением &lt;/h1>&lt;a name="h1301-2">&lt;/a>&lt;h2> Некие проблемы с&amp;nbsp;DIB? &lt;/h2>
&lt;ul>&lt;li> &lt;a href="http://dragonsoft.ru" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Русский фотограф&lt;/a>  &amp;ndash; можно списаться с&amp;nbsp;автором
&lt;/li>&lt;li> Заставке к&amp;nbsp;КОМПАС &amp;ndash; падает при&amp;nbsp;запуске без&amp;nbsp;патча
&lt;/li>&lt;li> Также на&amp;nbsp;этом падает Консультант+ (если запускать с&amp;nbsp;патчем ;))&lt;/li>&lt;/ul>
Ситуация:&lt;br />
1. код&amp;nbsp;около функции BITMAP_Object неверный&lt;br />
2. патч тоже неверный&lt;br />
3. в&amp;nbsp;/wine/dlls/gdi/tests/bitmap.c&lt;br />
должны быть тесты об&amp;nbsp;этом, они&amp;nbsp;тоже неверные (если их&amp;nbsp;исправить, они&amp;nbsp;должны работать на&amp;nbsp;Windows и&amp;nbsp;не работать в&amp;nbsp;wine)&lt;br />
Патч, корректирующий проблему для&amp;nbsp;КОМПАСА&lt;br />
&lt;!--notypo-->&lt;textarea class="code" rows="15" readonly="readonly">Index: bitmap.c
===================================================================
RCS file: /home/wine/wine/dlls/gdi/bitmap.c,v
retrieving revision 1.7
diff -u -u -r1.7 bitmap.c
--- bitmap.c    13 Apr 2005 16:11:18 -0000      1.7
+++ dlls/gdi/bitmap.c   17 May 2005 18:44:52 -0000
@@ -612,6 +612,7 @@
 /***********************************************************************
  *           BITMAP_GetObject
+ * Fill buffer with BITMAP or DIPSECTION (depends on dib field and count size)
  */
 static INT BITMAP_GetObject( HGDIOBJ handle, void *obj, INT count, LPVOID buffer )
 {
@@ -621,26 +622,19 @@
     {
         if( !buffer )
             return sizeof(DIBSECTION);
-       if (count &amp;lt; sizeof(DIBSECTION))
-       {
-           if (count &amp;gt; sizeof(BITMAP)) count = sizeof(BITMAP);
-       }
-       else
-       {
-           if (count &amp;gt; sizeof(DIBSECTION)) count = sizeof(DIBSECTION);
-       }
-
-       memcpy( buffer, bmp-&amp;gt;dib, count );
-       return count;
-    }
-    else
-    {
-        if( !buffer )
-            return sizeof(BITMAP);
-       if (count &amp;gt; sizeof(BITMAP)) count = sizeof(BITMAP);
-       memcpy( buffer, &amp;amp;bmp-&amp;gt;bitmap, count );
-       return count;
+        if (count &amp;gt;= sizeof(DIBSECTION))
+        {
+            count = sizeof(DIBSECTION);
+            memcpy( buffer, bmp-&amp;gt;dib, count );
+            return count;
+        }
+        if (count &amp;gt; sizeof(BITMAP)) count = sizeof(BITMAP);
     }
+    if( !buffer )
+        return sizeof(BITMAP);
+    if (count &amp;gt; sizeof(BITMAP)) count = sizeof(BITMAP);
+    memcpy( buffer, &amp;amp;bmp-&amp;gt;bitmap, count );
+    return count;
 }&lt;/textarea>&lt;!--/notypo-->&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> &lt;a href="http://dragonsoft.ru" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />Русский фотограф&lt;/a>
&lt;/li>&lt;li> Заставке к&amp;nbsp;КОМПАС&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
