rem: ico_color color = get_ico_color_from_bits(bitsHeader, bitsData, x, row);
add: rgba32_color color = get_rgba32_color_from_bits(bitsHeader, bitsData, x, row);
context: convert_bits_to_data(TranslatorBitmap &bitsHeader, uint8 *bitsData, ico_dir_entry &entry,	ico_bitmap_header &header, ico_color *palette, BPositionIO &target){	int32 bitsPerPixel = header.bits_per_pixel;	// round row bytes to next 4 byte boundary	int32 xorRowBytes = get_bytes_per_row(entry.width, bitsPerPixel);	int32 andRowBytes = get_bytes_per_row(entry.width, 1);	TempAllocator xorAllocator, andAllocator;	uint8 *xorRowData = (uint8 *)xorAllocator.Allocate(xorRowBytes);	if (xorRowData == NULL)		return B_NO_MEMORY;	uint8 *andRowData = (uint8 *)andAllocator.Allocate(andRowBytes);	if (andRowData == NULL)		return B_NO_MEMORY;	int32 numColors = 1 << bitsPerPixel;	// write XOR data (the actual image data)	// (ICO data is upside down, so we're starting at the last line)	for (uint32 row = entry.height; row-- > 0;) {		for (uint32 x = 0; x < entry.width; x++) {			ico_color color = get_ico_color_from_bits(bitsHeader, bitsData, x, row);			if (palette != NULL) {				uint8 index = find_ico_color(palette, numColors, color);				switch (bitsPerPixel) {					case 1:						set_1_bit_per_pixel(xorRowData, x, index);						break;					case 4:						set_4_bits_per_pixel(xorRowData, x, index);						break;					case 8:					default:						xorRowData[x] = index;						break;				}			} else {				// ToDo: true color modi			}		}		ssize_t bytesWritten = target.Write(xorRowData, xorRowBytes);		if (bytesWritten < B_OK)			return bytesWritten;		if (bytesWritten != xorRowBytes)			return B_IO_ERROR;	}	if (bitsPerPixel == 32) {		// the alpha channel has already been written with the image data		return B_OK;	}	// write AND data (the transparency bit)	for (uint32 row = entry.height; row-- > 0;) {		for (uint32 x = 0; x < entry.width; x++) {			ico_color color = get_ico_color_from_bits(bitsHeader, bitsData, x, row);			bool transparent = *(uint32 *)&color == B_TRANSPARENT_MAGIC_RGBA32 || color.alpha == 0;			set_1_bit_per_pixel(andRowData, x, transparent ? 1 : 0);		}		ssize_t bytesWritten = target.Write(andRowData, andRowBytes);		if (bytesWritten < B_OK)			return bytesWritten;		if (bytesWritten != andRowBytes)			return B_IO_ERROR;	}	return B_OK;}