powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сохранить TBitMap в файл типа TIFF
23 сообщений из 23, страница 1 из 1
Как сохранить TBitMap в файл типа TIFF
    #39546957
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Довольно просто средствами Delphi сохранить изображение в формате BMP .
В JPEG - тоже понятно. Делал так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
uses JPEG;
......
            With TJpegImage.Create do try
            Assign(BitMap);
            CompressionQuality := JPEG_TrackBar.Position; // Например, 60
            SaveToFile(FileName);
            end;


Сейчас есть необходимость сохранить bmp-картинку в файл типа TIFF .
Как это оперативно сделать, не подключая огромные сторонние библиотеки?
Delphi XE8, Win10
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39546973
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212,

Как вариант . Правда пишут что тестировался только на XE2, но, возможно, и выше заработает.
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39546980
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212,

файл типа TIFF - просто контейнер, внутри может быть что угодно, вплоть до проприетарных форматов.
Если нужен uncompressed или LZW, можно GDI+ задействовать.
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39546989
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SynGDIPlus - пробовал: огромная библиотека, старая, с кучей ненужных мне функций. После её подключения не удалось в TIFF сохранить (пустой файл на выходе). Причём сохранение в JPEG тоже перестало работать.
===
GDI+ - смотрел в эту сторону. Это использование стандартных функций из gdiplus.dll ?
Нужен пример...
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547012
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212,
Пример есть в стандартных демках.
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547056
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547229
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212SynGDIPlus - пробовал: огромная библиотека, старая, с кучей ненужных мне функций.
Мы точно об одном говорим? Сейчас сделал тестовый пример - консольное приложение, размером 140 Кб, нормально конвертит файлы из jpg в tiff. Главный недостаток - максимальное сжатие только LZW, так что файлы получаются огромные :)
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547233
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вот еще вариант: https://github.com/mike-lischke/GraphicEx
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547302
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не затруднит, скиньте консольное приложение вместе с библиотекой SynGDIplus (*.pas + *.inc файл).
Пробовал несколько раз: просто прочитать из файла Bitmap процедурой из SynGDIplus (Load), потом сохранить его в jpg или Tiff (там можно и так, и так). Упорно получаю пустой файл на выходе!
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547353
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример нашёл. Но при компиляции под Win64 он затыкается. Корректно работает только под Win32
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547399
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212Пример нашёл. Но при компиляции под Win64 он затыкается. Корректно работает только под Win32
Библиотека последней версии?
У меня вот так в Delphi XE2 x64 нормально работает
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
program tiff_test;

{$APPTYPE CONSOLE}

uses
  SysUtils, SynGDIPlus, Classes;

var
  Buffer: TMemoryStream;
begin
  Gdip.RegisterPictures;
  with TSynPicture.Create do try
    LoadFromFile('thumb.jpg');
    Buffer := TMemoryStream.Create;
    try
      if SaveAs(Buffer, gptTIF, Ord(evCompressionLZW)) = stOk then
        Buffer.SaveToFile('thumb.tiff');
    finally
      Buffer.Free;
    end;
  finally
    Free;
  end;
end.



XE8, к сожалению, нету. SynGDIPlus.pas версии 1.18.
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547401
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, вот простейший пример использования SynGDIplus. Если в Delphi выполнить компиляцию под Win32 - отлично работает: читает из файла Bmp, записывает в файл Tif. Но мне надо весь проект компилировать под Win64!! Вот тут происходит затык: Access Violation
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
unit Unit4;

interface

uses Winapi.Windows, Winapi.Messages, System.SysUtils,
  System.Variants,  System.Classes, Vcl.Graphics,  SynGDIplus,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type TForm4 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var Form4: TForm4;

implementation
{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
var Bmp: TBitmap;
begin
Gdip := TGDIPlusFull.Create('gdiplus.dll');
Bmp := TBitmap.Create;
Bmp.LoadFromFile('d:\Graphic01.bmp');
SynGDIPlus.SaveAs(Bmp, 'd:\test.tif', gptTIF);
Bmp.Free;   FreeAndNil(GdiP);
end;

end.


На этом зашёл в тупик...
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547402
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел у себя пример записи в png, с tiff должно быть аналогично
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
var
  pngCLSID: TGUID;
  GP: TGPBitmap;
  PDatIn, PDatOut: parBGRX;
  LData: BitmapData;

.....
      GetEncoderClsid('image/png',pngCLSID);
      with TBitmap.Create do
      try
         Width:=Settings.GMapStdWidth;
         Height:=Settings.GMapStdHeight;
         PixelFormat:=pf32bit;  //+прозрачность

        Canvas.Brush.Color:=clWhite;
        Canvas.FillRect(Bounds(0,0,width,height));

        //тут рисуем на канве битмапа


        GP:=TGPBitmap.Create(width,height, PixelFormat32bppARGB);
        try
           GP.LockBits(MakeRect(0,0,width, height),
                            ImageLockModeRead or ImageLockModeWrite,
                            PixelFormat32bppARGB, LData);

            try
              for j:=0 to Height-1 do begin
                PDatIn:=ScanLine[j];
                PDatOut:=Pointer(cardinal(LData.Scan0)+J*Width*4);
                for k:=0 to Width-1 do begin
                  PDatOut[k]:=PDatin[k];
                  PDatOut[k][3]:=255-PDatOut[k][1]; //перекодировка прозрачности
               end;
              end;
            finally
              GP.UnlockBits(LData);
            end;

            GP.Save('temp.png', pngCLSID,nil);
          finally
            GP.Free;
          end;
        finally
          Free;
        end;
      end;
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547404
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynGdiPlus качал отсюда.
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547408
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm4.Button1Click(Sender: TObject);
var 
  Bmp: TBitmap;
begin
  Gdip.RegisterPictures; // - инициализация SynGDIPlus
  Bmp := TBitmap.Create;
  try
    Bmp.LoadFromFile('d:\Graphic01.bmp');
    SynGDIPlus.SaveAs(Bmp, 'd:\test.tif', gptTIF);
  finally
    Bmp.Free;   
  end;
end;
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547413
Dunkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем не устраивает TWICImage для GDI+, который есть в Delphi, начиная с версии XE (или 2010)?
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547415
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alekcyp, Так пробовал и в Вашем варианте примера!! Отлично идёт в Delphi XE8 при компиляции под Win32. И тоже затыкается при компиляции под Win64 .
Соколинский Борис, А вот как переделать пример с Png на Tiff - не понял??
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547416
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212, вы уверены что затыкается именно на GP? Если в режиме отладки запустить что там в CallStack'e?
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547428
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DunkinЧем не устраивает TWICImage для GDI+, который есть в Delphi, начиная с версии XE (или 2010)?
На XE2 он вылетает ещё на попытке загрузить Bmp.
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547431
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212А вот как переделать пример с Png на Tiff - не понял?? Вероятно, так
Код: pascal
1.
GetEncoderClsid('image/tiff',tiffCLSID);


Если нужно задать параметры (алгоритм сжатия и т.п.) смотри пример из стандартной демки по GDI+
"Determining the Parameters Supported by an Encoder" и доки к нему.
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547435
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
unit Unit4;

interface

uses Winapi.Windows, Winapi.Messages, System.SysUtils,
  System.Variants,  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type TForm4 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var Form4: TForm4;

implementation
{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
   With TWICImage.Create do try
   ImageFormat := wifBmp;
   LoadFromFile('d:\Graphic01.bmp');
   ImageFormat := wifTiff;
   SaveToFile('d:\Graphic01.tif');
   finally
   Free;
   end;
end;

end.


Упссс!! Просто и понятно: TWICImage работает и при компиляции под Win64. И не надо тащить SynGDIplus.
СПАСИБО!!
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547601
Vladimir1212
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попутно заметил, что с помощью TWICImage так же просто можно загрузить в Bitmap файлы типа Jpeg или Tiff :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
....
var MapBitmap: Graphics.TBitmap;   MapFileName: TFileName;
....
var Ext1: String;    MyWICImage: TWICImage;   MyJPEG, MyTIFF: Boolean;
....
MapBitmap.Free;   MapBitmap := Graphics.TBitmap.Create;
Ext1 := LowerCase(ExtractFileExt(MapFileName));
//++++++ Загрузка карты из файла типа TIFF добавлена 03.11.17 +++++++++
MyJPEG := (Ext1 = '.jpg') or (Ext1 = '.jpeg');
MyTIFF := (Ext1 = '.tif') or (Ext1 = '.tiff');
   If MyJPEG or MyTIFF then try
   MyWICImage := TWICImage.Create;
   If MyJPEG then MyWICImage.ImageFormat := wifJpeg
    else MyWICImage.ImageFormat := wifTiff;
   MyWICImage.LoadFromFile(MapFileName);
   MyWICImage.ImageFormat := wifBMP;
   MapBitmap.Assign(MyWICImage);
   finally
   MyWICImage.Free;
   end else MapBitmap.LoadFromFile(MapFileName);
...
Рейтинг: 0 / 0
Как сохранить TBitMap в файл типа TIFF
    #39547659
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir1212,

Форматирование - адищная жесть, как это читать вообще можно...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сохранить TBitMap в файл типа TIFF
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]