assuming you have a “fragmentshader” which samples from that texture, you can easily multiply the sampled texel with your desired color
fragmentshader example:
in vec2 sometexcoords;
uniform vec4 desiredcolor;
uniform sampler2D arrow;
out vec4 outcolor;
void main() {
vec4 texel = texture(arrow, sometexcoords);
outcolor = texel * desiredcolor;
}
if the texel at that texture location (described by sometexcoords) is black, then the result wil be black
if the texel at that texture location (described by sometexcoords) is white, then the result wil be desiredcolor
to make black disappear, enable blending and add the result with the color already written in te framebuffer
https://www.opengl.org/wiki/Blending#Blend_Equations