<div dir="ltr">Found the problem. It's Big/Little Endian issue. It seems that SDL pixel format doesn't take into account the byte order for <b><strong style="font-weight: normal;">[RGBA]shift:<br><br>SDL_PixelFormat * PF = screen->format;<br>
<br>How can I modify the statement:<br><br></strong></b>PixelSrc = (ColorToReplace.R() << PF->Rshift) |
(ColorToReplace.G() << PF->Gshift) | (ColorToReplace.B()
<< PF->Bshift);<br><br>To use correct shift for little endian?<br><br><div class="gmail_quote">On Fri, Aug 29, 2008 at 10:44 AM, Michael Stepanov <span dir="ltr"><<a href="mailto:michael@stepanoff.org">michael@stepanoff.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr">Thanks a lot, guys, for your help. Finally I managed to get correct RGB from the 16bit pixel using SDL_GetRGB. First I get a pixel and then retrieve RGB from it:<br>
<br> Uint8 red, green, blue;<br> Uint32 pixel;<br>
<br> for(int y = 0; y < 480; y++) <br> {<br> for(int x = 0; x < 640; x++) <br> {<br> pixel = getpixel(surface, x, y);<br> SDL_GetRGB((Uint32)pixel, surface->format, &red, &green, &blue);<br>
}<br clear="all"> }<br> <br> But now I have another problem. There is a transformation of color:<br><br> PixelSrc = (ColorToReplace.R() << PF->Rshift) | (ColorToReplace.G() << PF->Gshift) | (ColorToReplace.B() << PF->Bshift);<br>
<br>Where ColorToReplace is (255,102,155)<br><br>But after that transformation it becomes (255, 252, 7). Could somebody tell me where is a mistake?<br><br>TIA<br><br>P. S. Sorry for not clever questions. I don't have a big C++ and SDL practice.<br>
<br>-- <br>Cheers,<br>Michael<br>
</div>
</blockquote></div><br><br clear="all"><br>-- <br>Cheers,<br>Michael<br>
</div>