Конференция "Media" » сжатие картинки
 
  • Станислав (20.03.12 21:28) [0]
    Здравствуйте, подскажите способы сжатия расширения изображения формата bmp,jpeg в делфи с минимальной потерей качества,какие операторы за это отвечают?
    если можно приведите пример сжатия любого расширения.
  • Станислав (20.03.12 22:00) [1]
    сори нужно уменьшить разрешение картинки а не расширение)
  • Cobalt © (21.03.12 13:23) [2]
    Самый простейший способ - это конвертнуть картинку в битмап, а потом сжать её с нужным тебе качеством.
  • brother © (21.03.12 18:42) [3]
    > а потом сжать её с нужным тебе качеством


    > нужно уменьшить разрешение картинки

    Делаем второй битамп, потом - BitBlit и Save tofile?
  • Rouse_ © (21.03.12 19:24) [4]
    Достаточно оптимально и с хорошим качеством при помощи 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;

  • brother © (22.03.12 06:10) [5]
    > оптимально и с хорошим качеством

    а BitBlit хуже?
  • Rouse_ © (22.03.12 09:51) [6]
    Конечно, картинка с артефактами получается...
  • Rouse_ © (22.03.12 10:01) [7]
    Вот как пример: http://rouse.drkb.ru/tmp/testgdi.png
    Большое изображение - оригинал
    Самое левое изображение - уменьшеный оригинал при помощи GDI+
    Среднее изображение - он же уменьшеный при помощи StretchBlt
  • Rouse_ © (22.03.12 10:07) [8]
    Хотя... тыж не про BitBlt/StretchBlt а про какой-то BitBlit() - такого я не знаю...
  • brother © (22.03.12 10:51) [9]
    > не про BitBlt/StretchBlt

    про него родимого)

    > а про какой-то BitBlit()

    опечатался...
  • han_malign (22.03.12 11:26) [10]

    > картинка с артефактами получается...

    - SetStretchBltMode(dc, HALFTONE)
    Только GDI+ вроде как пошустрее должен быть...
  • Rouse_ © (22.03.12 11:33) [11]

    > Только GDI+ вроде как пошустрее должен быть...

    В полтора раза пошустрей будет.
  • Станислав (22.03.12 22:06) [12]
    unit Unit1;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs;
     GDIPAPI,
     GDIPOBJ;

    type
     TForm1 = class(TForm)
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}
    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,что не так?
  • Станислав (22.03.12 22:50) [13]
    [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'
  • brother © (23.03.12 07:22) [14]
    > Dialogs;

    нужна запятая, а не точка с запятой ;)
  • mulenrusch © (16.11.13 11:28) [15]
    http://originalparfum.ru/muzhskaya/crave
    нужна запятая, а не точка с запятой ;)

    Просто запятая одна?
  • имя (01.12.13 16:48) [16]
    Удалено модератором
  • Juggernaut (03.12.13 13:03) [17]
    > BitBlt/StretchBlt

    Оно делает "ближайший сосед". Для увеличения ещё как-то сойдёт, для уменьшения вообще не вариант. Или руками, или библиотеками готовыми, как раз GDI+ подходит. Я руками делал. Просто для себя, тренировался.

    > нужна запятая, а не точка с запятой ;)

    ИМХО лучше написать отдельный uses для GDIPAPI,GDIPOBJ и все это после implementation вставить.

    > что не так?

    Возможно у вас нет заголовочников GDI+
    Кстати где бы взять их посвежее для Делфи7? Официально под неё нету же поддержки?
 
Конференция "Media" » сжатие картинки
Есть новые Нет новых   [134427   +37][b:0][p:0.002]