[ros-bugs] [Bug 3412] pictures and fax viewer doesnt draw picture

ReactOS.Bugzilla at reactos.org ReactOS.Bugzilla at reactos.org
Fri Nov 27 15:44:13 CET 2009


http://www.reactos.org/bugzilla/show_bug.cgi?id=3412





--- Comment #3 from vicmarcal <vicmarcal at hotmail.com>  2009-11-27 15:44:12 CET ---
Created an attachment (id=4433)
 --> (http://www.reactos.org/bugzilla/attachment.cgi?id=4433)
Comparing Traces


Hi, im giving a sight to this issue. 
Now JPGs are loaded correctly, but BMPs doesnt.

Here goes my findings, so maybe it can help

******************ISSUES FOUND **********************
**************when loading a BMP Image***************

This is the current chain to load a BMP image:
Imageview_drawimage->GdipDrawImageRect->GdipGetImageBounds->GdipDrawImageRectRect->GdiPDrawImagePointsRect
and stopped here since i found some issues:

Issues at GdiPDrawImagePointsRect:

1)Here there is an odd funcion called "transform_and_round_points" (at
graphics.c)
--First odd thing in that function is:
"* Native gdiplus uses gdi32 to do all this (via SetMapMode, SetViewportExtEx,
 * SetWindowExtEx, SetWorldTransform, etc.) but we cannot because we are using
 * gdi to draw, and these functions would irreparably mess with line widths."
(Why dont we use gdi32?Sould we rewrite this transform functions with GDI32?)

--Second odd thing: It returns quite long values in pti[].x and pti[].y: 
i.e(pti[1].y:18446744071562067968)

2)At GdiPDramImagePointsRect when loading a BMP we go across this piece of
code:
            INT temp;
            temp = pti[0].y;
            pti[0].y = pti[2].y;
            pti[2].y = temp;
Why are we storing big values in an INT(see Issue1)?Wouldnt it chunk the value?

3)At GdiPDramImagePointsRect we check this condition:
IF(IPicture_Render(image->picture, graphics->hdc,
            pti[0].x, pti[0].y, pti[1].x - pti[0].x, pti[2].y - pti[0].y,
            srcx * dx, srcy * dy,
            srcwidth * dx, srcheight * dy,
            NULL) != S_OK){

Here seems to be 2 bugs: 
a)Wrong Params?Look to  pti[1].x - pti[0].x, pti[2].y - pti[0].y params.
They dont look consistent from my newbie POV.

b)Tracing shows that when we arrive here values are:
 pti[1].x =pti[0].x=000000 so pti[1].x - pti[0].x=Cx is Zero.
So we are passing a Zero to IPicture_Render as the argument "CX". If Cx is
Zero,
IPicture_Render should return CTL_E_INVALIDPROPERTYVALUE(instead S_OK)
according to MSDN
http://msdn.microsoft.com/en-us/library/ms682202%28VS.85%29.aspx
and return with Error. Nowadays seems our IPicture_Render doesnt complain.And
we dont go inside the IF and jump it.

******************************************
**************************Doubts**********
I want to catch this bug but i have some doubts:

What are we checking with if (image->picture)?what are we storing in the
IPicture variable of the struct GpImage?
Seems this value is 0 for JPG images but a variable number for a BMP image.

************           ****************
************TRACE ADDED****************
I am adding the Results of some TRACES added to graphics.c. It compares the
load of a BMP image against JPG image.


-- 
Configure bugmail: http://www.reactos.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.



More information about the Ros-bugs mailing list