Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TGA Криво сохраняет картинку; / 25 сообщений из 43, страница 1 из 2
27.05.2018, 20:41
    #39650747
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Привет
Скачал GraphicEx.
Там был пример конверта с любого формата загруженного в Image, в TGA.
Но как мне вырезать кусок картинки, поместить его в Targa и сохранить как TGA !?
Пробую так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
  Target: TTargaGraphic;
{...}
          Target := TTargaGraphic.Create;
          Target.PixelFormat := pf24Bit;
          Target.Width := 256;
          Target.Height := 256;
          Target.Canvas.Draw(0, 0, Img1.Picture.Graphic);
           Target.SaveToFile('путь сохранения');
          Target.Free;



Ожидание:


Реальность:



Что делаю не так? Если после
Код: pascal
1.
Target.Canvas.Draw(0, 0, Img1.Picture.Graphic);

вывести содержимое Target.Canvas в Image1.Canvas то картинка такая, какая должна быть.
Почему сохраняется так криво?
...
Рейтинг: 0 / 0
27.05.2018, 20:52
    #39650753
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9neПривет
Почему сохраняется так криво? Вероятно потому, что кривая сохранялка. Вообще, конвертить через отрисовку - не лучшее решение, как в плане эффективности, так и надежности. Стоит поставить режим видеоадаптера меньше 24bpp и результат изменится.
Просто запусти готовый конвертор, вроде ImageMagic.
...
Рейтинг: 0 / 0
27.05.2018, 21:40
    #39650770
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Соколинский Борис,
Код: 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.
procedure TMainForm.TruevisionTarga1Click(Sender: TObject);

var
  Target: TTargaGraphic;

begin
  with SPD do
  begin
    Filter := FileFormatList.GetGraphicFilter([], fstBoth, [foCompact, foIncludeAll,
     foIncludeExtension],TTargaGraphic);

    if Execute then
    begin
      Target := TTargaGraphic.Create;
      try
        if Image1.Picture.Graphic is TBitmap then Target.Assign(Image1.Picture.Graphic)
                                             else
        begin
          Target.PixelFormat := pf24Bit;
          Target.Width := Image1.Picture.Width;
          Target.Height := Image1.Picture.Height;
          Target.Canvas.Draw(0, 0, Image1.Picture.Graphic);
        end;
        Target.SaveToFile(FileName);
      finally
        Target.Free;
      end;
    end;
  end;
end;



Сохраняет ровно, четко, как и должно.
Почему в моем случае получается крива картинка? Менял pf24bit на 16, картинка вырвиглаз)
...
Рейтинг: 0 / 0
27.05.2018, 21:53
    #39650773
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9ne,

А если копировать не через .Draw(), а через BitBlt() и сразу только нужный кусок?
...
Рейтинг: 0 / 0
27.05.2018, 22:42
    #39650779
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
alekcvpTech N9ne,

А если копировать не через .Draw(), а через BitBlt() и сразу только нужный кусок?
попробовал так:
Код: pascal
1.
BitBlt(Target.Canvas.Handle, 0, 0, 256, 256, img1.Canvas.Handle, 0, 0, SrcCopy);


компилится но выдает ошибку, типа онли с битмап надо.. как я понял..

перегнал img1 в bmp (Tbitmap)
Код: pascal
1.
BitBlt(Target.Canvas.Handle, 0, 0, 256, 256, bmp.Canvas.Handle, 0, 0, SrcCopy);


и того:
...
Рейтинг: 0 / 0
27.05.2018, 22:45
    #39650780
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
есть такая прекрасная библиотека, которая облегчит твои страдания
https://github.com/mike-lischke/GraphicEx
...
Рейтинг: 0 / 0
27.05.2018, 23:06
    #39650785
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
defecatorесть такая прекрасная библиотека, которая облегчит твои страдания
https://github.com/mike-lischke/GraphicEx
Вообще-то я скачал с оф сайта GraphicEx.
И там в архиве шёл исходник, пример конвертирования в ТГА.
По нему и делаю. Он та как раз и усложнил мне всё)
...
Рейтинг: 0 / 0
27.05.2018, 23:10
    #39650786
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9nedefecatorесть такая прекрасная библиотека, которая облегчит твои страдания
https://github.com/mike-lischke/GraphicEx
Вообще-то я скачал с оф сайта GraphicEx.
И там в архиве шёл исходник, пример конвертирования в ТГА.
По нему и делаю. Он та как раз и усложнил мне всё)

Мне нужно загрузить в Image1 картинку, любого формата, JPG, PNG, BMP ...
Разбить её на 12 равных частей, и эти части, сохранить в .tga
...
Рейтинг: 0 / 0
28.05.2018, 00:10
    #39650794
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9ne,
Делай через промежуточные битмап-ы если с ними нет проблем.
...
Рейтинг: 0 / 0
28.05.2018, 00:16
    #39650795
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9neМне нужно загрузить в Image1 картинку, любого формата, JPG, PNG, BMP ...
Разбить её на 12 равных частей, и эти части, сохранить в .tga

Ну, раз тебе это нужно, так попробуй прочитать документацию и почувствовать разницу между
Draw() и CopyRect().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2018, 00:38
    #39650798
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Dimitry SibiryakovTech N9neМне нужно загрузить в Image1 картинку, любого формата, JPG, PNG, BMP ...
Разбить её на 12 равных частей, и эти части, сохранить в .tga

Ну, раз тебе это нужно, так попробуй прочитать документацию и почувствовать разницу между
Draw() и CopyRect().

Дело не в этом, я пойду сейчас прочитаю, почувствую разницу и что дальше? А дальше будет то, что сохранения, в любом случае будут кривыми! Вырезается всё ровно и через Copyrect.
СОХРАНЯЕТСЯ КРИВО ДЯДЯ

Мне что бы приступить к делению на части, нужно проверить, будет ли оно вообще сохранять кусок.
На этом и тормознулся. Как догоню в чем дело, можно приступать к чтению Draw() и CopyRect().
...
Рейтинг: 0 / 0
28.05.2018, 00:44
    #39650799
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Соколинский БорисTech N9ne,
Делай через промежуточные битмап-ы если с ними нет проблем.
Что значит промежуточные битмапы?
Грузить в tbitmap? и оттуда уже работать? Если ты это имел в виду, то я пытался.
Я же объясняю, я вывожу из Target картинку в Image, что бы убедится, что точно ровно отрезал , и картинка явно ровно вырезана. Но после savetofile, получаю обрубок, как будто картинка сдвигается в ходе сохранения.
...
Рейтинг: 0 / 0
28.05.2018, 11:15
    #39650919
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
По мне так постановка задачи сомнительная, не думаю, что какой-то софт требует специально TGA и не сможет обработать BMP. Эти форматы только заголовками немного отличаются.

TGA формат вроде вообще примитивный, зачем брать какие-то "сохранялки", если можно легко и просто создать его из битмапа в фиксированном формате (24 бита)?
...
Рейтинг: 0 / 0
28.05.2018, 14:44
    #39651114
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
DimonkaПо мне так постановка задачи сомнительная, не думаю, что какой-то софт требует специально TGA и не сможет обработать BMP. Эти форматы только заголовками немного отличаются.

TGA формат вроде вообще примитивный, зачем брать какие-то "сохранялки", если можно легко и просто создать его из битмапа в фиксированном формате (24 бита)?
...
Рейтинг: 0 / 0
28.05.2018, 14:48
    #39651117
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Кто имеет GraphicEx попробуйте у себя вырезать часть картинки и сохранить в tga.
пожалуйста.
...
Рейтинг: 0 / 0
28.05.2018, 14:49
    #39651118
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9neМне что бы приступить к делению на части, нужно проверить, будет ли оно вообще сохранять
кусок.
На этом и тормознулся. Как догоню в чем дело, можно приступать к чтению Draw() и CopyRect().

Попробуй спеки почитать. Там вполне может быть неочевидное ограничение, например, на
размер картинки, кратный 8 пикселям или, как у битмапа, на размер строки, кратный 16-ти батам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2018, 16:12
    #39651167
527470
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Dimitry SibiryakovПопробуй спеки почитать. Там вполне может быть неочевидное ограничение, например, на
размер картинки, кратный 8 пикселям или, как у битмапа, на размер строки, кратный 16-ти батам.

У самого Tga таких ограничений нет, только если у компонента. Вообще tga простой и почти без ограничений формат, не понимаю почему про него все забыли.

Tech N9ne
попробуй сохранять с сжатием или без, может в либе есть косяк с этим. Если посмотреть на "реальность" то у тебя явно какой-то хлам записан в начале буфера данных изображения, из-за чего все остальное едет, создается впечатление что там записана палитра, о которой нет ни слова в заголовке и которой собственно не должно быть.

А вообще можешь приложить оригинал получаемого файла?
...
Рейтинг: 0 / 0
28.05.2018, 16:33
    #39651182
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
527470Dimitry SibiryakovПопробуй спеки почитать. Там вполне может быть неочевидное ограничение, например, на
размер картинки, кратный 8 пикселям или, как у битмапа, на размер строки, кратный 16-ти батам.

У самого Tga таких ограничений нет, только если у компонента. Вообще tga простой и почти без ограничений формат, не понимаю почему про него все забыли.

Tech N9ne
попробуй сохранять с сжатием или без, может в либе есть косяк с этим. Если посмотреть на "реальность" то у тебя явно какой-то хлам записан в начале буфера данных изображения, из-за чего все остальное едет, создается впечатление что там записана палитра, о которой нет ни слова в заголовке и которой собственно не должно быть.

А вообще можешь приложить оригинал получаемого файла?
картинка которую пытаюсь порезать
при попытки приложить файл, который сохраняется в TGA, мне пишет что размер привышен. он 2.17мб
при попытки загрузить на хостинг - недопустимый формат.
остаётся только скриншот сделать ) но смысл, если оригинал нужен)

А подскажите, как сохранять с сжатием?
...
Рейтинг: 0 / 0
28.05.2018, 16:39
    #39651191
527470
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Для того что бы понять что именно не так нужен выходной файл. Судя по исходникам на гите через SaveToFile сжатие всегда происходит, если сохранять через SaveToStream, то там есть параметр.
...
Рейтинг: 0 / 0
28.05.2018, 16:40
    #39651193
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9neМне нужно загрузить в Image1 картинку, любого формата, JPG, PNG, BMP ...
Разбить её на 12 равных частей, и эти части, сохранить в .tga
Нифига себе возраст у этой проблемы О_о
...
Рейтинг: 0 / 0
28.05.2018, 16:54
    #39651202
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
alekcvpTech N9neМне нужно загрузить в Image1 картинку, любого формата, JPG, PNG, BMP ...
Разбить её на 12 равных частей, и эти части, сохранить в .tga
Нифига себе возраст у этой проблемы О_о
Ага, тоже гуглил, не нашёл ответа))
Вообще это программка будет менять фон в игре cs 1.6. Уверен, тоже самое хотел сделать человек с форума по ссылке.
Решил для себя написать, попробовать, и сталкнулся с проблемой) теперь уже дело принципа)
...
Рейтинг: 0 / 0
28.05.2018, 16:58
    #39651207
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
527470Для того что бы понять что именно не так нужен выходной файл. Судя по исходникам на гите через SaveToFile сжатие всегда происходит, если сохранять через SaveToStream, то там есть параметр.
в архиве выходной файл
...
Рейтинг: 0 / 0
28.05.2018, 17:24
    #39651252
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9ne,

У меня вот так всё работает
Код: 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.
program tgarect;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  WinApi.Windows,
  System.SysUtils,
  System.Classes,
  Vcl.Graphics,
  Vcl.Imaging.jpeg,
  GraphicEx;

var
  SImg: TJPEGImage;
  Temp: TBitmap;
  TImg: TTargaGraphic;
  SRect: TRect;
  DRect: TRect;
begin
  try
    Temp := nil;
    TImg := nil;
    SImg := TJPEGImage.Create;
    try
      SImg.LoadFromFile('..\..\earth.jpg');
      Temp := TBitmap.Create;
      Temp.Assign(SImg);
      TImg := TTargaGraphic.Create;
      TImg.Height := 512;
      TImg.Width := 512;
      SRect.TopLeft := Point((SImg.Width - TImg.Width) div 2, (SImg.Height - TImg.Height) div 2);
      SRect.BottomRight := Point(SRect.Left + TImg.Width, SRect.Bottom + TImg.Height);
      DRect := Rect(0, 0, TImg.Width, TImg.Height);
      TImg.Canvas.CopyRect(DRect, Temp.Canvas, SRect);
      TImg.SaveToFile('..\..\small.tga');
    finally
      Temp.Free;
      TImg.Free;
      SImg.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

...
Рейтинг: 0 / 0
28.05.2018, 17:59
    #39651282
527470
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
Tech N9ne,

Как ты получил этот файл? В нём же полное изображение а не кусок, он нормально открывается.
...
Рейтинг: 0 / 0
28.05.2018, 18:08
    #39651286
Tech N9ne
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TGA Криво сохраняет картинку;
alekcvpTech N9ne,

У меня вот так всё работает
Код: 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.
program tgarect;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  WinApi.Windows,
  System.SysUtils,
  System.Classes,
  Vcl.Graphics,
  Vcl.Imaging.jpeg,
  GraphicEx;

var
  SImg: TJPEGImage;
  Temp: TBitmap;
  TImg: TTargaGraphic;
  SRect: TRect;
  DRect: TRect;
begin
  try
    Temp := nil;
    TImg := nil;
    SImg := TJPEGImage.Create;
    try
      SImg.LoadFromFile('..\..\earth.jpg');
      Temp := TBitmap.Create;
      Temp.Assign(SImg);
      TImg := TTargaGraphic.Create;
      TImg.Height := 512;
      TImg.Width := 512;
      SRect.TopLeft := Point((SImg.Width - TImg.Width) div 2, (SImg.Height - TImg.Height) div 2);
      SRect.BottomRight := Point(SRect.Left + TImg.Width, SRect.Bottom + TImg.Height);
      DRect := Rect(0, 0, TImg.Width, TImg.Height);
      TImg.Canvas.CopyRect(DRect, Temp.Canvas, SRect);
      TImg.SaveToFile('..\..\small.tga');
    finally
      Temp.Free;
      TImg.Free;
      SImg.Free;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.


взял этот код, подставил свои пути в loadfromfile и savetofile - больше ничего не трогал!
эффект тот же) часть изображения сдвигается.
delphi 7
мистика
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TGA Криво сохраняет картинку; / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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