-
Здравствуйте, подскажите способы сжатия расширения изображения формата bmp,jpeg в делфи с минимальной потерей качества,какие операторы за это отвечают? если можно приведите пример сжатия любого расширения.
-
сори нужно уменьшить разрешение картинки а не расширение)
-
Самый простейший способ - это конвертнуть картинку в битмап, а потом сжать её с нужным тебе качеством.
-
> а потом сжать её с нужным тебе качеством
> нужно уменьшить разрешение картинки
Делаем второй битамп, потом - BitBlit и Save tofile?
-
Достаточно оптимально и с хорошим качеством при помощи GDI+ uses
...
GDIPAPI,
GDIPOBJ;
procedure OnPaint(DC: HDC);
var
graphics : TGPGraphics;
Image, pThumbnail: TGPImage;
begin
graphics := TGPGraphics.Create(DC);
Image:= TGPImage.Create('..\..\Media\FRUIT.JPG');
pThumbnail := image.GetThumbnailImage(60, 48, nil, nil);
graphics.DrawImage(pThumbnail, 10, 10, pThumbnail.GetWidth, pThumbnail.GetHeight);
Image.Free;
pThumbnail.Free;
graphics.Free;
end;
-
> оптимально и с хорошим качеством
а BitBlit хуже?
-
Конечно, картинка с артефактами получается...
-
Вот как пример: http://rouse.drkb.ru/tmp/testgdi.pngБольшое изображение - оригинал Самое левое изображение - уменьшеный оригинал при помощи GDI+ Среднее изображение - он же уменьшеный при помощи StretchBlt
-
Хотя... тыж не про BitBlt/StretchBlt а про какой-то BitBlit() - такого я не знаю...
-
> не про BitBlt/StretchBlt
про него родимого)
> а про какой-то BitBlit()
опечатался...
-
> картинка с артефактами получается...
- SetStretchBltMode(dc, HALFTONE) Только GDI+ вроде как пошустрее должен быть...
-
> Только GDI+ вроде как пошустрее должен быть...
В полтора раза пошустрей будет.
-
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
GDIPAPI,
GDIPOBJ;
type
TForm1 = class(TForm)
private
public
end;
var
Form1: TForm1;
implementation
procedure OnPaint(DC: HDC);
var
graphics : TGPGraphics;
Image, pThumbnail: TGPImage;
begin
graphics := TGPGraphics.Create(DC);
Image:= TGPImage.Create('D:\1.jpeg');
pThumbnail := image.GetThumbnailImage(60, 48, nil, nil);
graphics.DrawImage(pThumbnail, 10, 10, pThumbnail.GetWidth, pThumbnail.GetHeight);
Image.Free;
pThumbnail.Free;
graphics.Free;
end;
end.
Запускаю ран высвечивается красная строка 7 по счету GDIPAPI,что не так?
-
[Error] Unit1.pas(8): Declaration expected but identifier 'GDIPAPI' found - Декларация ожидалось, но идентификатор "GDIPAPI" найден.что это значит?переводчик криво переводит, а с англ я не дружу. [Error] Unit1.pas(27): Undeclared identifier: 'TGPGraphics' - необъявленный идентификатор: "TGPGraphics".я же объявил их в var,почему ошибка? [Error] Unit1.pas(28): Undeclared identifier: 'TGPImage' - необъявленный идентификатор: 'TGPImage' [Error] Unit1.pas(30): Missing operator or semicolon - Отсутствует оператор или точка с запятой - не понял какого оператора ему нужно?) [Error] Unit1.pas(31): Missing operator or semicolon [Error] Unit1.pas(33): Missing operator or semicolon [Error] Unit1.pas(34): Missing operator or semicolon [Error] Unit1.pas(34): Missing operator or semicolon [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' - [Fatal Error] Project1.dpr (5): не удалось скомпилировать использовать 'Unit1.pas'
-
> Dialogs;
нужна запятая, а не точка с запятой ;)
-
-
Удалено модератором
-
> BitBlt/StretchBlt
Оно делает "ближайший сосед". Для увеличения ещё как-то сойдёт, для уменьшения вообще не вариант. Или руками, или библиотеками готовыми, как раз GDI+ подходит. Я руками делал. Просто для себя, тренировался.
> нужна запятая, а не точка с запятой ;)
ИМХО лучше написать отдельный uses для GDIPAPI,GDIPOBJ и все это после implementation вставить.
> что не так?
Возможно у вас нет заголовочников GDI+ Кстати где бы взять их посвежее для Делфи7? Официально под неё нету же поддержки?
|