28.01.2007, 00:24
общий
это ответ
Здравствуйте, KuchumHan!
Для уменьшения и увеличения разрешения надо использовать CopyRect с разными разными размерами источника и приемника информации. Поскольку TJpegImage не имеет канвы, то надо будет использовать промежуточные TBitMap буферы.
Однако, CopyRect использует самую примитивную интерполяцяю - ближайший сосед. Если вам нужно что-дь получше, можете поискать алгоритмы в интернете:
билинейная интерполяция алогритм реализация
бикубичская интерполяция алогритм реализация
В приложении пример, как конвертировать из TBitmap в TJpegImage. В обратную сторону делается по аналогии.
Приложение:
uses Jpeg, ClipBrd;procedure TfrmMain.ConvertBMP2JPEG;// converts a bitmap, the graphic of a TChart for example, to a jpegvar jpgImg: TJPEGImage;begin // copy bitmap to clipboard chrtOutputSingle.CopyToClipboardBitmap; // get clipboard and load it to Image1 Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0); // create the jpeg-graphic jpgImg := TJPEGImage.Create; // assign the bitmap to the jpeg, this converts the bitmap jpgImg.Assign(Image1.Picture.Bitmap); // and save it to file jpgImg.SaveToFile(‘TChartExample.jpg‘);end;