Re: SDL, pixel format and little endian issue

2008-09-05 Thread Guillem Jover
On Mon, 2008-09-01 at 16:27:55 +0300, ext Michael Stepanov wrote:
 SDL_GetRGB((Uint32)Pixel, m_pScreenImage-format, red, green, blue);

 But now I have to fill pink pixel by specified color. And as I understand I
 should convert that color from 32bit to 16bit? How can I do it?

You can use SDL_MapRGB.

regards,
guillem
___
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers


SDL, pixel format and little endian issue

2008-09-01 Thread Michael Stepanov
Hi,

I have a SDL application where I have to replace color of specified pixels.
So, I have a color in RGB representation and convert it to the pixel color
using that approach:

Uint32 PixelSrc = (0  PF-Rshift) | (128  PF-Gshift) | (192 
PF-Bshift);

But as result I get color 0x10c0 instead of 0x0080C0. Why it's happens? Does
SDL pixel format take into account byte order?

Moreover, I found following values for Xshift for little endian:

const int rshift = 0, gshift = 8, bshift = 16, ashift = 24;

Using them I can get correct pixel color:

Uini32 PixelDest = (0  rshift) | (128  gshift) | (192  bshift);

But the byte order is different. I get 0xc08000 but it should be 0x0080c0.
Any idea what I do wrongly?

TIA

-- 
Cheers,
Michael
___
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers


Re: SDL, pixel format and little endian issue

2008-09-01 Thread Frantisek Dufka
Michael Stepanov wrote:
 Hi,
 
 I have a SDL application where I have to replace color of specified 
 pixels. So, I have a color in RGB representation and convert it to the 
 pixel color using that approach:
 
 Uint32 PixelSrc = (0  PF-Rshift) | (128  PF-Gshift) | (192  
 PF-Bshift);
 
 But as result I get color 0x10c0 instead of 0x0080C0. Why it's happens? 

You did not mention pixel format, if you use device native 16 bit format 
(RGB565?) you cannot use values like 128 or 192 since it will overflow 5 
or 6 bits. Also you should do proper masking.

 Moreover, I found following values for Xshift for little endian:
 
 const int rshift = 0, gshift = 8, bshift = 16, ashift = 24;
 Uini32 PixelDest = (0  rshift) | (128  gshift) | (192  bshift);
 
 But the byte order is different. I get 0xc08000 but it should be 
 0x0080c0.

00c08000 seems fine to me for 00 | 0x808 |0xC016.

I think you should add a bit more of your example code and also tell us 
what you want to do (and maybe even why).

Frantisek
___
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers


Re: SDL, pixel format and little endian issue

2008-09-01 Thread Michael Stepanov
On Mon, Sep 1, 2008 at 4:16 PM, Frantisek Dufka [EMAIL PROTECTED] wrote:

 Michael Stepanov wrote:

 Hi,

 I have a SDL application where I have to replace color of specified
 pixels. So, I have a color in RGB representation and convert it to the pixel
 color using that approach:

 Uint32 PixelSrc = (0  PF-Rshift) | (128  PF-Gshift) | (192 
 PF-Bshift);

 But as result I get color 0x10c0 instead of 0x0080C0. Why it's happens?


 You did not mention pixel format, if you use device native 16 bit format
 (RGB565?) you cannot use values like 128 or 192 since it will overflow 5 or
 6 bits. Also you should do proper masking.

  Moreover, I found following values for Xshift for little endian:

 const int rshift = 0, gshift = 8, bshift = 16, ashift = 24;
 Uini32 PixelDest = (0  rshift) | (128  gshift) | (192  bshift);

 But the byte order is different. I get 0xc08000 but it should be 0x0080c0.


 00c08000 seems fine to me for 00 | 0x808 |0xC016.

 I think you should add a bit more of your example code and also tell us
 what you want to do (and maybe even why).


Ok, there is an SDL application which was ported from x86 to Nokia. The
issue with color is following. The application finds some icons on the
picture (they are all pink - 255, 102, 255) and replace them by proper color
- yellow, red, gray etc. The replacement colors are 32bit but Nokia uses
16bit as you already mentioned. So, I found the way how to compare pink
color with actual color of specified pixel:

SDL_GetRGB((Uint32)Pixel, m_pScreenImage-format, red, green, blue);

where Pixel is retrieved from the surface in the loop.

But now I have to fill pink pixel by specified color. And as I understand I
should convert that color from 32bit to 16bit? How can I do it?

Maybe that's why Xshift works wrongly because I try to use 32bit color
definition with 16bit surface?




 Frantisek




-- 
Cheers,
Michael
___
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers


Re: SDL, pixel format and little endian issue

2008-09-01 Thread Michael Stepanov
Just fixed issue with wrong color of pixels by creating 16bit pixel instead
of 32bit:

Uint16  PlutoPixelDest = ((ReplacementColor.R()  PF-Rloss)  PF-Rshift)
+
 ((ReplacementColor.G()  PF-Gloss) 
PF-Gshift) +
 ((ReplacementColor.B()  PF-Bloss) 
PF-Bshift);

where ReplacementColor is structure with 32bit RGB.


On Mon, Sep 1, 2008 at 4:27 PM, Michael Stepanov [EMAIL PROTECTED]wrote:



 On Mon, Sep 1, 2008 at 4:16 PM, Frantisek Dufka [EMAIL PROTECTED] wrote:

 Michael Stepanov wrote:

 Hi,

 I have a SDL application where I have to replace color of specified
 pixels. So, I have a color in RGB representation and convert it to the pixel
 color using that approach:

 Uint32 PixelSrc = (0  PF-Rshift) | (128  PF-Gshift) | (192 
 PF-Bshift);

 But as result I get color 0x10c0 instead of 0x0080C0. Why it's happens?


 You did not mention pixel format, if you use device native 16 bit format
 (RGB565?) you cannot use values like 128 or 192 since it will overflow 5 or
 6 bits. Also you should do proper masking.

  Moreover, I found following values for Xshift for little endian:

 const int rshift = 0, gshift = 8, bshift = 16, ashift = 24;
 Uini32 PixelDest = (0  rshift) | (128  gshift) | (192  bshift);

 But the byte order is different. I get 0xc08000 but it should be
 0x0080c0.


 00c08000 seems fine to me for 00 | 0x808 |0xC016.

 I think you should add a bit more of your example code and also tell us
 what you want to do (and maybe even why).


 Ok, there is an SDL application which was ported from x86 to Nokia. The
 issue with color is following. The application finds some icons on the
 picture (they are all pink - 255, 102, 255) and replace them by proper color
 - yellow, red, gray etc. The replacement colors are 32bit but Nokia uses
 16bit as you already mentioned. So, I found the way how to compare pink
 color with actual color of specified pixel:

 SDL_GetRGB((Uint32)Pixel, m_pScreenImage-format, red, green, blue);

 where Pixel is retrieved from the surface in the loop.

 But now I have to fill pink pixel by specified color. And as I understand I
 should convert that color from 32bit to 16bit? How can I do it?

 Maybe that's why Xshift works wrongly because I try to use 32bit color
 definition with 16bit surface?




 Frantisek




 --
 Cheers,
 Michael




-- 
Cheers,
Michael
___
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers