Графика в консольном приложении

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Графика в консольном приложении

Сообщение vada » 27.04.2020 16:11:46

Добрый день!

Возникла вот такая задачка: В консольном приложении нарисовать картинку, и сохранить ее в файл jpg/png.
Подозревал что не прокатит, но попробовал.
Создал переменную типа TImage, и с ее помощью нарисовал. Естественно, не собрался модуль.
Линковщик потребовал подцепить регистрацию всего на свете связанного с GUI

В инетах ничего путного не нашел.
Есть, правда, у меня еще один вариант. Когда-то написал класс для рисования картинки в памяти. Ну байтовый массив у меня есть (ну будет). Хоть его в JPG преобразовать.

Знатоки, подскажите чем воспользоваться для решения задачки?
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Графика в консольном приложении

Сообщение zub » 27.04.2020 18:05:51

BGRABitmap и Vampyre Imaging должны уметь картинки без виджесета, но не проверял
zub
долгожитель
 
Сообщения: 2553
Зарегистрирован: 14.11.2005 23:51:26

Re: Графика в консольном приложении

Сообщение vada » 27.04.2020 18:29:01

Спасибо. Попоробую...
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Графика в консольном приложении

Сообщение mig-31 » 27.04.2020 19:19:49

Формулировка вашего вопроса размыта. GUI(десктоп) операционной системы доступно или нет? Или ваша задача состоит в том, чтобы не тянуть с собой библиотеки виджетов? =@zub

В Виндовс консоль и так кострирована, хотя помню я видел библиотеку для отображения битмап для Турбо Паскаля.

Если только консоль(терминал) без GUI(десктоп/Х11 Виндов), так тут только Линух/*БСД. Там досупен фрамебуффер и через него можно показывать картинки, видео. Есть готовые программы, которую вы можете вызвать из своей программы.
mig-31
постоялец
 
Сообщения: 210
Зарегистрирован: 14.07.2011 13:46:48

Re: Графика в консольном приложении

Сообщение vada » 27.04.2020 21:21:29

Ничего показывать не надо. JPG/NPG файл с картинкой создать.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Графика в консольном приложении

Сообщение DYUMON » 28.04.2020 06:20:13

Псевдометод нашел на главном сайте по паскалю.
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes,
  windows, sysutils,
  FPimage, FPReadJPEG
  ;

type
  TColorRGB=packed record
    case Boolean of
       False:(R,G,B,X:Byte;);
       True:(RGB:DWORD);
    end;

Function FPColorToRGB(Const Color : TFPColor) : TColorRGB;

begin
  With Result,Color do
    begin
    R:=(Red   and $FF00) shr 8;
    G:=(Green and $FF00) shr 8;
    B:=(Blue  and $FF00) shr 8;
    X:=0;
    end;
end;

procedure PaintPicture(AFileName: string; APosX, APosY: integer);
var
  LImage: TFPCustomImage;
  LWnd: HWND;
  LDC: HDC;
  LColor: TFPColor;
  LWinColor: TColorRGB;
  x, y: Integer;
begin
  if not FileExists(AFileName) then
    exit;

  LWnd := GetConsoleWindow;
  LDC := GetDC(LWnd);
  try
    LImage  := TFPMemoryImage.create(0,0);
    try
      LImage.LoadFromFile(AFileName);

      for y := 0 to LImage.Height-1 do
        for x := 0 to LImage.Width-1 do
        begin
          LColor := LImage.Colors[x,y];
          LWinColor := FPColorToRGB(LColor);

          SetPixel(LDC, x,y,LWinColor.RGB);
        end;

    finally
      LImage.Free;
    end;
  finally
    ReleaseDC(LWnd, LDC);
  end;
end;

begin
  PaintPicture('face.jpg',0,0);
  ReadLn;
end.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 200
Зарегистрирован: 11.03.2009 13:32:54

Re: Графика в консольном приложении

Сообщение mig-31 » 28.04.2020 11:42:18

vada писал(а):Ничего показывать не надо. JPG/NPG файл с картинкой создать.

Просто надо формулировать вопрос более четко.

Вики на который ссылается @DYUMON. Создание и манипуляция в памяти с примерами.
https://wiki.freepascal.org/fcl-image
mig-31
постоялец
 
Сообщения: 210
Зарегистрирован: 14.07.2011 13:46:48

Re: Графика в консольном приложении

Сообщение Alex2013 » 28.04.2020 14:56:06

На форуме несколько раз уже тема всплывала (Сходу не нашел но точно было )
Зы
Может стоит сделать "мета-тему " (но не обычное ЧАВО ) по всяческим решенным вопросам ? :idea:
Последний раз редактировалось Alex2013 09.05.2020 03:12:03, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 1747
Зарегистрирован: 03.04.2013 11:59:44

Re: Графика в консольном приложении

Сообщение vada » 29.04.2020 15:37:06

О! DYUMON Спасибо!
Все получилось в лучшем виде!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru