1/*
2 * Copyright 2005, J��r��me Duval. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Inspired by SoundCapture from Be newsletter (Media Kit Basics: Consumers
6 * and Producers)
7 */
8
9#include <Bitmap.h>
10#include <Debug.h>
11#include <Screen.h>
12
13#include "DrawingTidbits.h"
14
15rgb_color
16ShiftColor(rgb_color color, float percent)
17{
18	rgb_color result = {
19		ShiftComponent(color.red, percent),
20		ShiftComponent(color.green, percent),
21		ShiftComponent(color.blue, percent),
22		0
23	};
24
25	return result;
26}
27
28static bool
29CompareColors(const rgb_color a, const rgb_color b)
30{
31	return a.red == b.red
32		&& a.green == b.green
33		&& a.blue == b.blue
34		&& a.alpha == b.alpha;
35}
36
37bool
38operator==(const rgb_color &a, const rgb_color &b)
39{
40	return CompareColors(a, b);
41}
42
43bool
44operator!=(const rgb_color &a, const rgb_color &b)
45{
46	return !CompareColors(a, b);
47}
48
49void
50ReplaceColor(BBitmap *bitmap, rgb_color from, rgb_color to)
51{
52	ASSERT(bitmap->ColorSpace() == B_CMAP8);
53	// other color spaces not implemented yet
54
55	BScreen screen(B_MAIN_SCREEN_ID);
56	uint32 fromIndex = screen.IndexForColor(from);
57	uint32 toIndex = screen.IndexForColor(to);
58
59	uchar *bits = (uchar *)bitmap->Bits();
60	int32 bitsLength = bitmap->BitsLength();
61	for (int32 index = 0; index < bitsLength; index++)
62		if (bits[index] == fromIndex)
63			bits[index] = toIndex;
64}
65
66void
67ReplaceTransparentColor(BBitmap *bitmap, rgb_color with)
68{
69	ASSERT(bitmap->ColorSpace() == B_CMAP8);
70	// other color spaces not implemented yet
71
72	BScreen screen(B_MAIN_SCREEN_ID);
73	uint8 withIndex = screen.IndexForColor(with);
74
75	uchar *bits = (uchar *)bitmap->Bits();
76	int32 bitsLength = bitmap->BitsLength();
77	for (int32 index = 0; index < bitsLength; index++)
78		if (bits[index] == B_TRANSPARENT_8_BIT)
79			bits[index] = withIndex;
80}
81
82