01. december 2005 - 19:08
Der er
3 kommentarer og
1 løsning
Convert 16bit RGB til 24 bit RGB
Hej jeg har noget billede data som er gemt i en 16 bit RGB (565) som jeg skal have lavet om til 24 bit (normal 888).. Jeg kan simplethen bare ikke få det til at virke.. Jeg har gennemsøgt google men uden held.. Findes der ikke en standard måde at konvertere mellem de to formater?
Jeg har forsøgt meget forskellige.. men min farver bliver aldrig gode.. jeg har prøvet et andet program det godt kan lave pæne farver - nogle der har en ide til hvilken teknik han måske kunne bruge..
Jeg er klar over at der er gået info tabt i konverteringen fra 24 til 16, men mit billede er så grimt at det næsten må være en fejl..
01. december 2005 - 20:41
#2
Hej arne tak for svaret, jeg har ikke lige tjekket det, men det er nok oxo rigtigt.. jeg fandt problemet - jeg have følgende:
public final void rawEncoding(int xpos, int ypos, int width, int height ) throws IOException
{
int totalPixels = width * height;
dataIn.readFully(input, 0, totalPixels*2);
int j = 0;
for(int k = 0; k < totalPixels; ++k)
{
pixels[k] = ReceiveThread.getColor((input[j]<<8) | input[j+1]);
j += 2;
}
RFBView.rfbRef.setImage(pixels,width,height, xpos, ypos);
}
Hvor getColor er:
private final static int getColor(int px)
{
return ((0xF800 & px) << 8) | ((0x7E0 & px) << 5) | ((0x1F & px) << 3);
}
Og det virkede ikke oxo, så ændrede jeg det til:
public final void rawEncoding(int xpos, int ypos, int width, int height ) throws IOException
{
int totalPixels = width * height;
dataIn.readFully(input, 0, totalPixels*2);
int j = 0;
for(int k = 0; k < totalPixels; ++k)
{
pixels[k] = ReceiveThread.getColor(((input[j]&0xFF)<<8) | (input[j+1]&0xFF));
j += 2;
}
RFBView.rfbRef.setImage(pixels,width,height, xpos, ypos);
}
bemærk de to &0xFF på hver byte.. det var simplethen nogle garbage bits eller sådan noget der fik det til at gå galt..
Er der nogle der kan komme med optimerings ideer, ville det være fedt!
Det er til J2ME, MIDP 2.0..
Arne du må gerne smide et svar.