Lazarus и PCX-файлы

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

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

Lazarus и PCX-файлы

Сообщение Smoky555 » 05.03.2007 15:42:10

Народ, подскажите, чем можно соединить перечисленное?

Задача такая - есть PCX файлы, содержащие спрайты, если файлы с описанием этих спрайтов (координаты начала, размеры). Мне надо выдергивать по-спрайтно, кусками ...

Мож я что-то не так понимаю, уж вы объясните, мастера, я - новичок в программировании в общем и в Лазарусе - в частности ...

Надеюсь на развернутый ответ :)

P.S. не обижусь, если ткнёте в онлайновый ресурс с описанием моего случая (ну или хотя бы примерно).

Удачи всем ;)
Smoky555
незнакомец
 
Сообщения: 6
Зарегистрирован: 05.03.2007 15:35:33
Откуда: Volgograd

Сообщение shade » 05.03.2007 16:15:05

Никогда не сталкивался с PCX, так, что первое, что приходить на ум - конвертирование в какой-либо другой формат (jpg, png, bmp)...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Attid » 05.03.2007 16:28:35

ну если есть слова (координаты начала, размеры)
то могу предложить то тебе нужен TFileStream
почитать тут

PS там где написанно для delphi также должно работать и для лазаря
это так если совсем новичек =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение shade » 05.03.2007 18:41:52

Attid писал(а):ну если есть слова (координаты начала, размеры)
то могу предложить то тебе нужен TFileStream

Можно конечно и так, но, imho, это анахронизм.
В случае с bmp за который отвечает TBitmap проще сделать так
Код: Выделить всё
var
  bmp: TBitmap;
  sprite: TBitmap;
  sprite_rect: TRect;
  rect: TRect;
begin
  bmp := TBitmap.Create;
  bmp.LoadFromFile('ImageSet.bmp');
  sprite := TBitmap.Create;
  rect.Left := 0;
  rect.Top := 0;
  rect.Right := sprite_rect.Right - sprite_rect.Left;
  rect.Bottom := sprite_rect.Bottom - sprite_rect.Top;
  sprite.width := rect.Right;
  sprite.height := rect.Bottom;
  sprite.canvas.CopyRect(rect, bmp.Canvas, sprite_rect);
  bmp.Free; // Если исходная картинка более не нужна
end;

И никакого шаманства на уровне TFileStream...

В случае другий форматов (jpg, png) нужно сначала получить bmp,.. хотя бы через те же bmp.canvas.draw или bmp.canvas.CopyRect
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение shade » 05.03.2007 18:45:50

А если у вас много спрайтов одинаковых размеров, то см. также TImageList
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение ev » 05.03.2007 19:43:46

был удивлен, что IE уже не читает PCX
может стоит задуматься о смене формата? ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение Smoky555 » 06.03.2007 01:57:59

Ладно, с этим я разобрался, все считывается, все определяется, НО
возник второй вопрос - на форме есть компонент TImage, как в него вставить рисунок, по-байтно сохраненный в двумерном массиве?
Мне подсказали вот такую последовательость :
Код: Выделить всё
SetBitmapBits(Image1.Picture.Bitmap.Handle, sizeof(TestArray), @TestArray);
Image1.Refresh; {для того, чтобы изменения отобразились}


Однако-ж Lazarus говорит что "Нет такой функции ...
Smoky555
незнакомец
 
Сообщения: 6
Зарегистрирован: 05.03.2007 15:35:33
Откуда: Volgograd

Сообщение shade » 06.03.2007 11:41:50

Это функция WinAPI и определена в модуле windows, соответственно работать будет только под Windows, да и не все так просто, нужно еще про формат пикселей помнить (от него зависит в каком формате нужно подставить TestArray)
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Lazarus

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

Сейчас этот форум просматривают: zub и гости: 38

Рейтинг@Mail.ru