毎ピクセルごとにXAllocNamedColor呼んでりゃ、そりゃ遅いだろ。
XAllocNamedColorはサーバに聞きにいく。

visualからrgbのmaskとshiftもってきて、自分でrgbからpixel値作って
XImageのバッファ直接弄るのがいちばん速いけど、各種depthとか対応しなきゃならないし
そこまでやる気なさそうなソースだから、せめてXAllocNamedColorで問い合わせて把握した
色のピクセル値はキャッシュして使い回せ。普通の画像ならかなりマシな速度になると思うので。