Хаюшки, уважаемые эксперты. Мне для моего приложения на языке Паскаль нужен вывод 256-цветных BMP картинок . О существовании множества подобных программ в Сети я знаю, но все они используют ассемблерные вставки. В ассемблере я новичок, поэтому разобратся, что там и как для меня не представляется возможным. Мне нужен алгоритм, с помошью которого можно было-бы изменять положение картинки на экране, тоесть передавать фактические параметры в поцедуру вывода картинки, и тем самым изменять положение картинки на экране. И если у кого-то имеется ссылка на подробную русскую документацию по BMP, то киньте ссылочку. Заранее благодарен.
Приветствую Вас, zaknafeyn! 1. Если вся проблема в том, чтобы переместить картинку, то тебе необходимо пользоваться следующими функциями: ImageSize(X1,Y1,X2,Y2: integer):word; - определяет количество памяти, необходимое для сохранения картинки; GetImage(X1,Y1,X2,Y2: integer; Var Buf); - помещает в переменную Buf копию прямоугольного изображения; PutImage(X,Y: integer; Var buf; Mode: Word);-выводит в заданное место прямоугольную область, охраненную в переменной Buf. Для того, чтобы затереть изображение можно использовать эту же процедуру. Ответ отправлен: 27.10.2003, 12:51 Отправитель: samum2000 Отвечает sir henry
Приветствую Вас, zaknafeyn! Перво-наперво, у Вас должен быть 256-цветный графический режим. На обработку картинки он не влияет, зато наглядно видно на экране :)). Как ни крути, а без ассемблера в этом деле не обойтись. Родные средства Паскаля позволяют только вставить и выставить обратно картинку. Этого конечно мало. Приходиться писать дополнительную библиотеку для работы с картинками. И ассемблер здесь - это существенное увеличение скорости работы. Чем писать все это самому, лучше воспользоваться готовой библиотекой. Если охота вставлять оттуда куски кода в свою прогу, то нужно найти библиотеку с исходным кодом :)). На сайте pascal.sources.ru таких просто море. А какой Паскаль Вы используете? Настоятельно рекомментдую FreePascal. Во-первых свободный (см. название), во-вторых для него написано множество дополнительных графических библиотек, тоже свободных
и доступных в виде исходников. Ну и наконец, немаловажная деталь, он не такой глючный как TP/BP и в добавок 32-разрядный. Ответ отправлен: 25.10.2003, 07:05 Отправитель: sir henry
Вопрос № 329
Дорогие эксперты, Не могли бы вы пожалуйста выслать мне функции/процедуры для перевода string->integer, integer->string, string->real, real->string, integer->real, real->integer. Спасибо!
Приветствую Вас, dude! function StrToInt(Value: String):Integer; var tmp,err:Integer; begin val(value,tmp,err); StrToInt:=Round(tmp); end; function IntToStr(Value: Integer):String; var tmp:Integer;s1:String; begin tmp:=Value; Str(tmp,s1); StrToInt:=s1; end; function StrToFloat(Value: String):Real; var tmp,err:Real; begin val(value,tmp,err); StrToInt:=tmp; end; function FloatToStr(Value: Real):String; var tmp:Real;s1:String; begin tmp:=Value; Str(tmp,s1); StrToInt:=s1; end; function IntToFloat(Value: Integer):Real; begin IntToFloat:=Value end; function FloatToInt(Value: Real):Integer; begin FloatToInt:=Round(Value) end; Ответ отправлен: 26.10.2003, 13:10 Отправитель: Cybernetic Creature Отвечает Tancho
Доброе время суток, dude! Не надо ничего выслать тебе!Просто читай книжечки о Paskal'е и смотри Приложение!
Приложение: Ответ отправлен: 27.10.2003, 13:23 Отправитель: Tancho Отвечает samum2000
Здравствуйте, dude! Целые и вещественные в строку: STR(x [:width [:decimals]], ST) - преобразует Х в строку ST, как процедура Write/writeln Строка в целое или вещественное: VAL(ST,X,CODE) - преобразует строку ST в целое или вещественное (тип автоматически выбирает), если есть ошибка в представлении числа, то CODE будет содержать номер ошибочной позиции. Для округления вещественных чисел существуют процедуры Trunc(x)-усекает до longint; Round(x)-округляет до longint; Ответ отправлен: 27.10.2003, 12:52 Отправитель: samum2000 Отвечает sir henry
Приветствую Вас, dude! String->integer, string->real: Val(string, число, код_ошибки); integer->string, real->string: Str(число:длина_числа:десятичных_знаков, string); real->integer: Round(real):integer; integer->real: real:=integer; Ответ отправлен: 27.10.2003, 04:50 Отправитель: sir henry Отвечает _vt
Здравствуйте, dude! А чем тебя не устраивают встроенные функции Паскаля Val и Str?Почитай описание и разберись...
*** E-Man - we are waiting for you ***
Ответ отправлен: 26.10.2003, 03:44 Отправитель: _vt Отвечает Boriss
Добрый день, dude! Такие процедуры/функции в находятся в модуле System, который обязательно подключается к программе: Пусть определено: VAL R: Real; I: Integer; S: String; Code: Integer; Тогда ниже примеры кода: 1)string->integer; string->real: Процедура VAL(S, R, Code); VAL(S, I, Code); если Code = 0, то преобразование прошло успешно, если не 0, то встретидись символы такие, что преобразовать нельзя 2)integer->string; real->string: Процедура STR(R, S); STR(R:12, S); STR(R:10:4, S); STR(I, S); STR(I:4, S); 3)integer->real - никаких проблем: i:=5; R:=i 6)real->integer - есть фунциии: пусть R:=4.2; тогда: i:=Round(R); - округление; i:=Trunc(R); - отсекает дробную часть; R:=Int(R); - возвращает (определяет) целую часть аргумента; R:=Frac(R); - возвращает дробную часть аргумента
Ответ отправлен: 27.10.2003, 12:22 Отправитель: Boriss
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.