И,
Galkov писал(а):
Никаких эмоций А на это,
Galkov писал(а):
Я считаю, что имеет.
Безо всяких если бы.
А ты: ДА, или НЕТ
Я затруднюсь ответить, наверное, все же -- имеет.
Давай оставим этот вопрос, пока, открытым. Бага обнаружена и убрана откатом, и обратного -- не доказано. Надо ждать ответа от Автора исправлений, что бы в дальнейшем от других не было лишних вопросов, как у меня возникли -- а почему это черные линии появились, которых не должно быть, в принципе.
Вернемся к нашим баранам
Вот исправленный метод, количество шаманских плясок вокруг контекста уменьшено до трех (меньше, ну никак, не получается)
#pas
procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;
var pCls:THiImageLoader; stat:DWORD; sz:TSize; bmp:PBitmap; Rect:TRect;
begin
pCls := THiImageLoader(pUserData);
pCls.FImgCtx.GetStateInfo(stat, sz, 0);
bmp := NewDIBBitmap(sz.cx, sz.cy, pf32bit);
Rect := MakeRect(0, 0, sz.cx, sz.cy);
pCls.FImgCtx.Draw(bmp.Canvas.Handle, Rect);
_hi_OnEvent(pCls._event_onLoad, bmp);
if pCls.valid then begin
if (sz.cx * 100) div sz.cy > (pCls.wsz * 100) div pCls.hsz then begin
pCls.FImgCtx.StretchBlt(pCls.DC, 0, (pCls.hsz - (pCls.wsz * sz.cy) div sz.cx) div 2, pCls.wsz, (pCls.wsz * sz.cy) div sz.cx, 0, 0, sz.cx, sz.cy, SRCCOPY);
end else begin
pCls.FImgCtx.StretchBlt(pCls.DC, (pCls.wsz - (pCls.hsz * sz.cx) div sz.cy) div 2, 0, (pCls.hsz * sz.cx) div sz.cy, pCls.hsz, 0, 0, sz.cx, sz.cy, SRCCOPY);
end;
bmp.Free;
bmp := NewDIBBitmap(pCls.wsz, pCls.hsz, pf32bit);
BitBlt(bmp.Canvas.Handle, 0, 0, pCls.wsz, pCls.hsz, pCls.DC, 0, 0, SRCCOPY);
end;
_hi_OnEvent(pCls._event_onCopyLoad, bmp);
bmp.Free;
SetEvent(pCls.hOK);
end;
И еще, я жду дальнейших рекомендаций по добавлению свойств массштабировани и копирования