|
|
Регистрация | << Правила форума >> | 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); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
Вот тут еще можно посмотреть:
https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx Заголовки для GDI+ ищи в интернете, они есть. PS. angvelem, а ты нигде бикубическую фильтрацию не встречал? |
#4
|
||||
|
||||
offtop: Я особо не заморачивался поиском различных фильтров. Этот исходник я нарыл около 10 лет назад, когда писал программу для различных эффектов над изображениями. Больше подобным не занимался.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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
|
||||
|
||||
согласись есть разница в пользу HALFTONE
Пишу программы за еду. __________________ |
#10
|
||||
|
||||
разница с HALFTONE ощутимая)
|