透明贴图的小黑线,该怎么解决

透明贴图的小黑线
今天画了一个透明贴图,
用CImage画的,在暗色调的图片上没有问题,但是在亮色调的图片上就会莫名其妙的出现黑框,
不知道怎么结局

C/C++ code

if(!Is_rim)
    {
    CImage bk,t_bk;
    bk.Load(L"D:\\边框.jpg");
    MakePerImg(&bk,&t_bk,img.GetWidth(),img.GetHeight());
    ///////////////////////////////
    TransparentBlt(memdc.GetDC(),0,0,memdc.GetWidth(),memdc.GetHeight(),t_bk.GetDC(),0,0,t_bk.GetWidth(),t_bk.GetHeight(),RGB(0,0,0));//实现透明
    t_bk.ReleaseDC();
    memdc.ReleaseDC();
    memdc.BitBlt(this->GetDC()->GetSafeHdc(),0,0);
    Is_rim=true;
    }
    else
    {
        Is_rim=false;
        update=true;
    }


------解决方案--------------------
刚才实现了一下,我发现我将jpg图片的一部分涂黑,然后用TransparentBlt画确实有些地方透明了,而有些地方存在好多黑色,但是我将jpg图片读入后,用fillSolidRect画成部分黑色的,然后TransparentBlt画是能实现透明的效果的。我猜是不是jpg图片压缩后,图像的黑色部分像素并不是全是RGB(0,0,0)的,会不会出现了一些值得偏移,具体可能和jpg压缩算法有关吧,这我没有了解过。
C/C++ code

void CDrawTestView::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    CImage bk,t_bk;
    bk.Load(L"D:\\aaa.jpg");
    t_bk.Create(bk.GetWidth(), bk.GetHeight(), bk.GetBPP());
    CDC* memdc = CDC::FromHandle(t_bk.GetDC());
    memdc->FillSolidRect(0, 0, bk.GetWidth(), bk.GetHeight(), RGB(255, 255, 0));
    CDC* backDC = CDC::FromHandle(bk.GetDC());
    backDC->FillSolidRect(0, 0, bk.GetWidth() / 2, bk.GetHeight() / 2, RGB(0, 0, 0));
    TransparentBlt(memdc->GetSafeHdc(),0,0,t_bk.GetWidth(),t_bk.GetHeight(),bk.GetDC(),0,0,bk.GetWidth(),bk.GetHeight(),RGB(0,0,0));//实现透明
    BitBlt(dc.GetSafeHdc(), 0, 0, t_bk.GetWidth(), t_bk.GetHeight(), memdc->GetSafeHdc(), 0, 0, SRCCOPY);
    t_bk.ReleaseDC();
    bk.ReleaseDC();
    bk.ReleaseDC();
}