Действительно ли возможно сглаживать масштабированный TBitmap в Delphi?

Я использую Stretched=True на TImage с 256x256 битовый массив. Это уменьшено 1,2,4 или 8. Как ожидалось текст на битовом массиве становится более ужасным, больше я отступаю '1'. Я замечаю, хотя тот проводник Windows 7 представляет уменьшенную версию битового массива, 'более мягкого' и более приятного. Действительно ли возможно 'размыть' TBitmap таким образом?

5
задан Brian Frost 7 May 2010 в 13:12
поделиться

2 ответа

Я полагаю, вы имеете в виду Stretched = True для TImage, а не для TBitmap.

К сожалению, TImage не имеет встроенных ресамплеров, когда дело доходит до изменения размера изображений в нем. Я бы рекомендовал использовать Graphics32 , поскольку он поддерживает множество ресамплеров (некоторые из них лучше для увеличение размера другие для уменьшения размера)

8
ответ дан 18 December 2019 в 09:48
поделиться

Используя режим HALFTONE StretchBltMode, вы получите более плавные результаты, чем при обычном растягивании. Это будет работать только в Windows 2000 и более поздних версиях

procedure SmoothResize();
var pt:TPoint;
    h: HDC;
begin
  h := imgMainPicture.Canvas.Handle;
  // Previous call to StretchDraw
  // imgMainPicture.Canvas.StretchDraw(Rect(0, 0, imgMainPicture.Width - 1,
  // imgMainPicture.Height - 1), curPicture.AnnotatedBitmap);
  // Normal StretchDraw uses STRETCH_DELETESCANS as StretchBltMode , HALFTONE should give better results
  GetBrushOrgEx(h, pt);
  SetStretchBltMode(h, HALFTONE);
  SetBrushOrgEx(h, pt.x, pt.y, @pt);
  StretchBlt(h, 0, 0, imgMainPicture.Width - 1,
    imgMainPicture.Height - 1, curPicture.AnnotatedBitmap.Canvas.Handle,
    0, 0, curPicture.Width,curPicture.Height,SRCCOPY);
end;
9
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: