Kun luen Imagen levyltä ja kirjoitan sen sitten tiedostoon käyttäen ByteArrayOutputStreamia, niin kuvan värit ovat vaihtaneet paikkaa. Koodin pätkä:
for (int y = 0; y < height; y )
{
for (int x = 0; x < width; x )
{
int v = bufferedImage.getRGB(x, y);
v = (v&0xff) ((v&0xff00)>>8) ((v&0xff0000)>>16);
if (v > max) max = v;
if (v < min) min = v;
}
}
int th = (max min)/2;
byte b = 0;
int mask = 0x80;
int bit = 0;
for (int y = 0; y < height; y )
{
for (int x = 0; x < width; x )
{
int v = bufferedImage.getRGB(x, y);
v = (v&0xff) ((v&0xff00)>>8) ((v&0xff0000)>>16);
if (v >= th)
{
b |= mask >> bitIdx;
}
bit ;
if (bit == 8)
{
baos.write(b);
b = 0;
bitIdx = 0;
}
}
}
if (bit != 0)
{
baos.write(b);
}
baos.flush();
out.write(baos.toByteArray());
for (int y = 0; y < height; y )
{
for (int x = 0; x < width; x )
{
int v = bufferedImage.getRGB(x, y);
v = (v&0xff) ((v&0xff00)>>8) ((v&0xff0000)>>16);
if (v > max) max = v;
if (v < min) min = v;
}
}
int th = (max min)/2;
byte b = 0;
int mask = 0x80;
int bit = 0;
for (int y = 0; y < height; y )
{
for (int x = 0; x < width; x )
{
int v = bufferedImage.getRGB(x, y);
v = (v&0xff) ((v&0xff00)>>8) ((v&0xff0000)>>16);
if (v >= th)
{
b |= mask >> bitIdx;
}
bit ;
if (bit == 8)
{
baos.write(b);
b = 0;
bitIdx = 0;
}
}
}
if (bit != 0)
{
baos.write(b);
}
baos.flush();
out.write(baos.toByteArray());
Vastaukset 2
Vanhimmat
Ihan heittämällä voisin arvata että sun pitää vielä lisätä alpha (läpinäkyvyys).
Eli jotain
v = (v&0xff) ((v&0xff00)>>8) ((v&0xff0000)>>16) ((v&0xff000000) >> 24);
En kyllä ole ikinä testannu et en tiedä toimiiko. Aikaisemmin jos on tarvinnut tehdä jotain kuvien kanssa olen käyttäny valmiita kirjastoja.
int UPPER = 0xFF000000;
int RED = 0xFF0000;
int GREEN = 0xFF00;
int BLUE = 0xFF;
// väriarvot RGB-intistä
int red = (v&RED)>>16;
int green = (v&GREEN)>>8;
int blue = (v&BLUE);
// väriarvot inttiin
v = UPPER|(red