![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Необходимо уменьшить масштаб полученного снимка с минимальными потерями качества.
Результат: масштаб был уменьшен с помощью функции ResizeBitmap - качество изображения изменилось с худшим результатом: ![]() Качество изображения без функции нормальное, но масштаб 1366х768: ![]() Прошу помочь разобраться с уменьшением масштаба изображения с минимальными потерями в качества. Код:
uses Jpeg; function ResizeBitmap(BmpIn : TBitmap; NewWidth, NewHeight : Integer) : TBitmap; begin Result := TBitmap.Create; try Result.Width := NewWidth; Result.Height := NewHeight; Result.PixelFormat := BmpIn.PixelFormat; Result.Canvas.StretchDraw(Rect(0, 0, Result.Width, Result.Height), BmpIn); except Result.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var JpegIm: TJpegImage; bm: TBitMap; ScrJpg : String; begin ScrJpg := 'screenshot.jpg'; DeleteFile(ScrJpg); bm := TBitMap.Create; bm.Width := Screen.Width; bm.Height := Screen.Height; BitBlt(bm.Canvas.Handle, 0, 0, bm.Width, bm.Height, GetDC(0), 0, 0, SRCCOPY); bm := ResizeBitmap(bm, 1280, 720); JpegIm := TJpegImage.Create; JpegIm.Assign(bm); JpegIm.CompressionQuality := 90; JpegIm.Compress; JpegIm.SaveToFile(ScrJpg); bm.Destroy; JpegIm.Destroy; Form1.Close; end; |
|
#2
|
||||
|
||||
|
Пример использования:
Код:
ResampleBitmap(BmpSrc, BmpDest, ResampleFilters[5].Filter, ResampleFilters[5].Width); |
|
#3
|
|||
|
|||
|
Вот тут еще можно посмотреть:
https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx Заголовки для GDI+ ищи в интернете, они есть. PS. angvelem, а ты нигде бикубическую фильтрацию не встречал? |
|
#4
|
||||
|
||||
|
offtop: Я особо не заморачивался поиском различных фильтров. Этот исходник я нарыл около 10 лет назад, когда писал программу для различных эффектов над изображениями. Больше подобным не занимался.
|
|
#5
|
||||
|
||||
|
Код:
type
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
...
procedure TForm1.FormCreate(Sender: TObject);
var
Bitmap: TBitmap;
begin
Width:=Screen.Width;
Height:=Screen.Height;
Left:=0;
Top:=0;
Image1.Width:=ClientWidth-Image1.Left shl 1;
Image1.Height:=ClientHeight-Image1.Top shl 1;
Bitmap:=TBitmap.Create;
try
Bitmap.LoadFromFile('Безымянный.bmp');
SetStretchBltMode(Image1.Canvas.Handle, HALFTONE);
StretchBlt(Image1.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, SRCCOPY);
finally
Bitmap.Free;
end;
end;основной момент в коде: Код:
SetStretchBltMode(Image1.Canvas.Handle, HALFTONE); StretchBlt(Image1.Canvas.Handle, 0, 0, Image1.Width, Image1.Height, Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, SRCCOPY); |
|
#6
|
|||
|
|||
|
Цитата:
Все перепробовал, в итоге получается изображение с весом в 0 кб, Подскажи angvelem, может, что-то я не так делаю? ![]() |
|
#7
|
|||
|
|||
|
Цитата:
результат тот же, качество изображения плохое. |
|
#8
|
||||
|
||||
|
а хорошим оно никогда не будет. это же растровая картинка.
|
|
#9
|
||||
|
||||
|
|
|
#10
|
||||
|
||||
|
разница с HALFTONE ощутимая)
|