Привет
Так, короче я стормозил. Я подумал, что SelectObject вернёт NULL, потому что контекст только что создан, и битмап в него ещё никакой не селектили
Я чего не понял, если честно, вот у тебя в коде создался h_dc_pic, и больше нигде не юзится, зато есть h_dc_mem, который нигде не создаётся, зато в конце удаляется

Ничего не перепутала?

Вот этот код должен работать, если не заработает, значит ошибка где-то в другом месте:
h_dc_pic:=CreateCompatibleDC(h_dc);
if(h_dc_pic <> NULL) then begin
lbmp:=SelectObject(h_dc_pic,img2.Picture.Bitmap.Handle);
if(lbmp <> 0) then begin
StretchBlt(h_dc,0,0,picW,picH,h_dc_pic,0,0,img2.Picture.Bitmap.Width,img2.Picture.Bitmap.Height,SRCCOPY);
SelectObject(h_dc_pic,lbmp);
end
else Log('');//запись в лог
DeleteDc(h_dc_mem);
end;