Re: SDL, pixel format and little endian issue
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
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
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
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
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