Кто-то из Италии попросил меня пример использования pf1bit в изображениях (Bitmaps), я послал часто ответа из имеющихся заготовок, подумал, и добавил здесь другие детали для pf8bit и pf24bit.
Общее
Новое в Delphi 3 свойство scanline допускает быстрый доступ к отдельным пикселям, но необходимо указать с каким Bitmap.PixelFormat вы работаете, прежде чем сможете иметь доступ к пикселям.
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
Автор: Mike Scott
- Как жизнь?
- Слоями…
Adobe Photoshop
Как мне загрузить изображение (BMP) и отобразить это на рабочем столе без использования формы? (Я хочу отображать это из DLL).
Существует один способ сделать это: создать холст TCanvas, получить контекст устройства для рабочего стола и назначить его дескриптору холста. После рисования на холсте десктоп отобразит ваше творение. Вот пример:
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Смешивание цветов рисунка с другим цветом
Зависимости: Graphics
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Автор Федоровских Николай
Дата: 5 июня 2002 г.
***************************************************** }
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Добавление шума в изображение
Зависимости: Graphics
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Автор Федоровских Николай
Дата: 5 июня 2002 г.
***************************************************** }
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Эффект ‘Блоки’
Зависимости: Windows, Classes, Graphics
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Собственное написание (Николай федоровских)
Дата: 1 июня 2002 г.
***************************************************** }
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Изменение гаммы рисунка
Зависимости: Graphics
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Автор Федоровских Николай
Дата: 5 июня 2002 г.
***************************************************** }
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mit dem folgenden Code kann die Werte der einzelnen Farbkanale
(Rot, Grun, Blau) verandern.
So lassen sich leicht fantastische Effekte erzielen.
Parameter:
- Bitmap: TBitmap
Erwartet ein TBitmap auf dem die Anderungen
vollzogen werden sollen.
- Red: Integer
Erwartet einen Integer der den neuen Farbwert bestimmt.
Der Wert wird zu dem alten Farbwert addiert.
Betragt der Wert 0, wird keine Anderung am Farbkanal
vorgenommen.
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Изменение контрастности изображения
Value - значение контрастности на отрезке [-100..100]
Local - если True, то применяется “местный контраст”,
если False, то - “общий” (более красивый)
Зависимости: Windows
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Николай Федоровских
Дата: 14 июля 2003 г.
***************************************************** }
Read more »
Filed in Графика by admin | Февраль 27, 2008 | No Comments
Основные принципы:
С помощью TDXSound вы можете создавать звуковые эффекты в вашей программе. Все что Вам понадобится это поставить на форму 2 компонента: DXSound и DXWaveList. Последний является “коллекцией wav файлов”. В который вы будете заносить wav файлы.
Установите
DxWaveList1.DXSound := DXSound1
. В этот DXSound будет воспроизводиться звук. Чтобы проиграть звук вам надо в DxWaveList1 добавить какой нибудь wav файл. После чего вызвать
dxwavelist1.items[0].play(false);
Будет проигран звук, который находится в списке нулевым. Можно и так:
dxwavelist1.Items.Find(’somewave1′).Play(False);
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Вторая статья по игре “В ОСАДЕ” поясняющая, каким образом в игре появились кнопки!
Итак, компонент Игровой Кнопки (MGIB) находится в файле Unit2.pas в исходнике игры. Рассматривать его мы не будем, будем рассматривать только то как он работает!
Вся игра у нас делится на сцены. Каждая сцена делится на три части:
1.Загрузка сцены (выполняется один раз перед самой сценой)
2.Отрисовка/Обработка сцены (выполняется столько раз в секунду сколько у вас FPS, до тех пор пока не см.3)
3.Завершение сцены (освобождает память, один раз после окончания Отрисовки/Обработки сцены, только в том случае если игрок покинул игру или грузится другая сцена)
Подробнее в других статьях.
На загрузку сцены пишем:
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Многие игры в нынешнее время поддерживают мультиплеер, почему? Потому что сейчас люди уже перестали довольствоватся Ai’ем, который играет в частности ‘линейно’, его нельзя обмануть, пошутить над его действиями или разозлить… =) С ним играть можно только на уровне обучения игры, а далее – сеть, живые игроки… ;). Если это маленькое вступление заставило вас захотеть добавить в свою игру мультиплеер то эта статья для вас. Итак, сразу к делу. Сделаем самую легкую программу, с одной кнопкой. =) Кидаем ее на форму, не забыв кинуть DXPlay. В этой программе давайте сделаем что бы форма подключения DXPlay выводилась при запуске. Идем в настройки DXPlay и устанавливаем любой Guid путем нажатия кнопки New, этот параметр (imho) “устанавливает” уникальности вашему мультиплееру. Далее так: TForm1
try
DXPlay1.Open; //Пытаемся открыть форму подключения
except
on E: Exception do
begin
Application.ShowMainForm := False;
Application.HandleException(E);
Application.Terminate; //Если не подключаемся или ошибка выходим их программы
end;
end;
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Как реализован движок.
Есть прямая (AB) у этой прямой имеем координаты X1,Y1,X2,Y2
Дальше что нам нужно ?
Ну исходя из того что у нас есть не только прямые но и Герой или другие создания Нам нужно знать стоит наше создание на прямой или нет … А что такое наш герой да и другие объекты ??? Да ничего больше как обычная точка с двумя координатами Xobj,Yobj Так вот продолжаем, что бы проверить стоим мы на прямой или нет, мы смотрим (вычисляем) Растояние от точки (XObj,Yobj) до прямой (AB) (подобные формулы можно найти в любом справочнике по математике) Конечная формула у меня получилась такой
A:=-Y2+Y1;
B:=X2-X1;
C:=-X2*Y1+Y2*X1;
D := Round((A*Xpos+B*Ypos+C)/(Sqrt(Sqr(A)+Sqr(B))));
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Кручу-верчу, обмануть хочу, или как использовать продвинутые методы вывода спрайтов. В классе TSprite есть три метода: DoDraw, DoCollision и DoMove Чтобы заставить спрайт созданный таким образом:
TPlayer = class(TImageSprite)
end;
выводится через продвинутые методы (DrawRotate, DrawAplha, DrawSub, DrawWave, StretchDraw), нужно “заглушить” стандартный вывод при создании объекта. Вот так:
type
THero = class(TImageSprite)
Angle:integer;
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
procedure DoDraw; override; // вот здесь
end;
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Перед тем как приступить я хотел бы сделать пару оговорок. Во-первых для использования DirectX в Delphi необходим файл с заголовками, где объявлены имена функций DirectX API либо какой-нибудь компонент, позволяющий обращаться к интерфейсу DirectX через свои методы. В момент написания сего опуса я использую компонент DelphiX (автор - Hiroyuki Hori), распространяемый бесплатно - http://www.yks.ne.jp/~hori/DelphiX-e.html. (если у вас есть что-нибудь получше и Вы поделитесь со мной - я буду очень признателен.)
И еще один адрес, по которому можно скачать компонент DelphiX : http://www.torry.ru/vcl/packs/hhdelphix.zip
По возможности я буду писать и названия методов DelphiX и названия соответствующих интерфейсов Directx API – чтоб вам легче было ориентироваться в DirectX SDK. Во-вторых при всем своем гипертрофированном самомнении я не могу назвать себя экспертом в области DirectX – так что не судите чересчур строго. Я надеюсь сие творение хоть как то сможет помочь делающим первые шаги в DirectX – если Вы круче меня – буду признателен за помощь и указание на ошибки (коих увы наверняка сделал немало (честное слово не нарочно
) Оговорка без номера – я пишу эти строки в те времена когда последней версией DirectX является DirectX 6.
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Палестинский филиал WESTWOOD впервые в мире реализовал первый уровень игры “RED ALERT 2″ (взятие Пентагона) в полном 3D и максимальным уровнем реализма… Сообщается о незначительных (около 50 000) жертвах среди бета-тестеров…
Для этого урока возьмем программу из предыдущего (так будет во всех уроках - в каждом следующем мы просто улучшаем программу предыдущего), единственные изменения - я возьму спрайты покрасивее:
Это фон(он нарисован в Fireworks):
так, приступим к работе
Цель этого занятия - научится проигрывать звук, передвигать картинки и проверять их столкновения. Для проверки столкновений понадобится третий спрайт, я нарисую стенку.
Теперь я уже не буду объяснять, как вывести стенку на экран. Я выведу её с координатами “400,400.0″
Все, можно пристурать к анимированию. В описание класса Ttarelka, перед “Public” надо поставить такую строку:
procedure DoMove(MoveCount: Integer); override;
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
StretchDraw не работает с иконками. В данной ситуации я бы поступил так: рисовал бы иконку в Timage и затем назначал изображение другому, большему Timage.
Пример кода:
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
Image1.Canvas.Draw(0, 0,
TIcon(StringGrid1.Objects
[StringGrid1.Col, StringGrid1.Row]));
Form2.Image1.Picture := Image1.Picture;
end;
{Примечание. Form2.Image1 имеет Stretch установленный
в True и размер, бОльший размера иконки в 4 раза}
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Для этого достаточно текущее разрешение экрана и в соответствии с ним изменить дескриптор иконки приложения. Естественно, что Вам придется создать в ресурсах новые иконки.
Поместите следующий код в файл проекта (.DPR) Вашего приложения:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
case GetDeviceCaps(GetDC(Form1.Handle), HORZRES) of
640 : Application.Icon.Handle := LoadIcon (hInstance, ‘ICON640′);
800 : Application.Icon.Handle := LoadIcon (hInstance, ‘ICON800′);
1024 : Application.Icon.Handle := LoadIcon (hInstance, ‘ICON1024′);
1280 : Application.Icon.Handle := LoadIcon (hInstance, ‘ICON1280′);
end;
Application.Run;
Filed in Графика by admin | Январь 27, 2008 | No Comments
А по утрам я плохо загружаюсь…
Если ваша иконка хранится в компоненте Image (видимым или иным способом), вы можете написать:
Application.Icon := Image1.Picture.Icon;
Если в файле ресурса:
Application.Icon.Handle := LoadIcon(hInstance, ‘ICONNAME’);
В любом случае для форсирования показа иконки необходимо вызвать следующую функцию:
InvalidateRect(Application.Handle, NIL, True);
.. и новая иконка предстанет свету.
Иконка, расположенная в .RES-файле, должна быть видима в .EXE-файле, к примеру, при просмотре файла посредством Program Manager. Иконка, расположенная в компоненте Image, в этом случае не видна.
Filed in Графика by admin | Январь 27, 2008 | No Comments
{How to get icon from a shortcut file ?
I have found that if you use a ListView component,
to show a list of files in any folder that contains shortcuts,
then the shortcut icons do not appear correctly -
they do not show the true icon of the application to which they relate.
However, there is a a very useful feature of SHGetFileInfo,
which is SHGFI_LINKOVERLAY. This adds the shortcut “arrow”,
which is shown in the bottom left corner of any shortcut icon.
The demo code below shows the basic use of the SHGFI_LINKOVERLAY feature.
I have added code to this demo, to distingiush between shortcut and non-shortcut files -
without this code, it will overlay the shortcut “arrow” irrespective of the file type.
To show the icon of a shortcut, the following code can be used as a demo:
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Сначала в разделе interface пишем такой код:
type ThIconArray = array[0..0] of hIcon;
type PhIconArray = ^ThIconArray;
function ExtractIconExA(lpszFile: PAnsiChar;
nIconIndex: Integer;
phiconLarge : PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall;
external ’shell32.dll’ name ‘ExtractIconExA’;
function ExtractIconExW(lpszFile: PWideChar;
nIconIndex: Integer;
phiconLarge: PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall;
external ’shell32.dll’ name ‘ExtractIconExW’;
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение системной иконки, ассоциированной с файлом в данной системе
Функция позволяет получить такую же иконку любой директории или любого файла,
какую вы видите в “проводнике”. Размеры - 16 * 16 (по умолчанию) или 32 * 32
(второй параметр - itLarge)
Зависимости: Юниты VCL + ComObj, ActiveX, ShellApi, ShlObj;
Автор: Дмитрий Баранов, kda@pisem.net, Москва
Copyright: Взято из MSDN
Дата: 20 мая 2002 г.
***************************************************** }
type
TIconType = (itSmall, itLarge);
function GetIcon(const FileName: string; const IconType: TIconType = itSmall):
TIcon;
var
FileInfo: TShFileInfo;
ImageList: TImageList;
IT: DWORD;
begin
// CoInitialize; лучше - поместите вызов этой ф. в раздел initialization
IT := SHGFI_SMALLICON;
Result := TIcon.Create;
ImageList := TImageList.Create(nil);
if (IconType = itLarge) then
begin
IT := SHGFI_LARGEICON;
ImageList.Height := 32;
ImageList.Width := 32;
end;
FillChar(FileInfo, Sizeof(FileInfo), #0);
ImageList.ShareImages := true;
ImageList.Handle := SHGetFileInfo(
PChar(FileName),
SFGAO_SHARE,
FileInfo,
sizeof(FileInfo),
IT or SHGFI_SYSICONINDEX
);
ImageList.GetIcon(FileInfo.iIcon, Result);
ImageList.Free;
{ Не забывайте освободить полученную иконку }
end;
Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var
Icon: TIcon;
begin
Self.Icon := GetIcon(’C:\’);
end;
Filed in Графика by admin | Январь 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение иконки для зарегистрированного расширения по его имени
Функции в качестве параметра передаётся имя файла и в случае удачного выполнения
она (функция) возвращает handle’р иконки (HICON). В случае, если в реестре небыло
найдено расширения предложеного файла, функция возвращает 0.
Также при успешном выполнении необходимо освободить хендлер. Для этого используется
функция DestroyIcon(Handle:HICON).
Зависимости: модуль Registry, модуль ShellAPI, модуль SysUtils и стандартные
функции Pos, Delete, Copy, ExtractFileExt, ExtractIcon, StrToInt.
Автор: Poirot, poirot@rol.ru, Нижний Новгород
Copyright: Poirot (частично из Delphi 5. Руководство разработчика)
Дата: 16 июня 2002 г.
***************************************************** }
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
DrawIcon(Image1.Canvas.Handle, 0, 0, LoadCursor(0, IDC_ARROW));
Filed in Графика by admin | Январь 27, 2008 | No Comments
{
I want to combine 2 icons like Windows does with
the links (the small arrow).
Can anyone tell me how that works?
}
function CombineIcons(FrontIcon, BackIcon: HIcon): HIcon;
var
WinDC: HDC;
FrontInfo: TIconInfo;
FrontDC: HDC;
FrontSv: HBITMAP;
BackInfo: TIconInfo;
BackDC: HDC;
BackSv: HBITMAP;
BmpObj: tagBitmap;
begin
WinDC := GetDC(0);
GetIconInfo(FrontIcon, FrontInfo);
FrontDC := CreateCompatibleDC(WinDC);
FrontSv := SelectObject(FrontDC, FrontInfo.hbmMask);
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Присвойте свойству Application.Icon другую иконку и вызовите функцию
InvalidateRect(Application.Handle, NIL, True);
… для немедленной перерисовки.
Filed in Графика by admin | Январь 27, 2008 | No Comments
var
Hfont: Thandle;
logfont: TLogFont;
font: Thandle;
count: integer;
begin
LogFont.lfheight := 30;
logfont.lfwidth := 10;
logfont.lfweight := 900;
LogFont.lfEscapement := -200;
logfont.lfcharset := 1;
logfont.lfoutprecision := out_tt_precis;
logfont.lfquality := draft_quality;
logfont.lfpitchandfamily := FF_Modern;
font := createfontindirect(logfont);
Selectobject(Form1.canvas.handle, font);
SetTextColor(Form1.canvas.handle, rgb(0, 0, 200));
SetBKmode(Form1.canvas.handle, transparent);
{textout(form1.canvas.handle,10,10,’Повернутый’,7);}
for count := 1 to 100 do
begin
canvas.textout(Random(form1.width), Random(form1.height), ‘Повернутый’);
SetTextColor(form1.canvas.handle, rgb(Random(255), Random(255),
Random(255)));
end;
deleteobject(font);
end;
Filed in Графика by admin | Январь 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> “Сквозь Вселенную” с дополнительными возможностями
Демонстрационный пример, динамически рисующий “движение среди звёзд” с вращением.
Зависимости: Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs
Автор: Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
Copyright: Dimka Maslov
Дата: 1 августа 2003 г.
***************************************************** }
unit Starfields;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
private
procedure AB00(var Message); message $AB00;
public
{ Public declarations }
end;
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Создайте Bitmap, и воспользуйтесь свойством холста TBitmap-а, чтобы рисовать на нём. Следующий пример создаёт Bitmap, рисует на его canvas-е, рисует canvas на форме, а затем освобождает bitmap.
Пример:
procedure TForm1.Button1Click(Sender: TObject);
var
bm: TBitmap;
begin
bm := TBitmap.Create;
bm.Width := 100;
bm.Height := 100;
bm.Canvas.Brush.Color := clRed;
bm.Canvas.FillRect(Rect(0, 0, 100, 100));
bm.Canvas.MoveTo(0, 0);
bm.Canvas.LineTo(100, 100);
Form1.Canvas.StretchDraw(Form1.ClientRect, Bm);
bm.Free;
end;
Filed in Графика by admin | Январь 27, 2008 | No Comments
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Отрисовка стрелки с заданными параметрами
// рисует стрелку с заданными параметрами
// X_Line, Y_Line - координаты “неподвижного” конца линии стрелки;
// Length_Line, Length_Arrow - длина линии и бокового ребра стрелки;
// Angle_Line, Angle_Arrow - углы между линией стрелки и горизонтальной
// осью и между линией стрелки и боковым ребром стрелки;
// IsAllTriangle - если True, то “подвижные” концы боковых рёбер стрелки
// соединяются отрезком прямой(и не рисуется высота равнобедренного треугольника стрелки);
// DrawSurface - поверхность на которой будет рисоваться стрелка
Зависимости: ничего неожиданного
Автор: Александр
Copyright: default
Дата: 14 февраля 2004 г.
***************************************************** }
Read more »
Filed in Графика by admin | Январь 27, 2008 | No Comments
Введение
Фанаты игр часто встречаются с аббревиатурой “DirectX”. На упаковках игр для Windows 95 она появилась в конце 1995 года примерно одновременно с выходом самой операционной системы. С тех пор качество игр резко ушло вверх, достигнув небывалых высот. Что же такое DirectX? Это набор специальных API, которые предоставляют работающей программе прямой доступ к аппаратной части компьютера, обеспечивая наивысшее быстродействие при выводе графики, звука, получения данных от устройств ввода и т. д. Сразу надо сказать, что библиотека создавалась исключительно для игр, т. к. именно они требуют от аппаратных средств все 100% производительности. Позднее, с выходом новых версий, DirectX нашёл применение и в мультимедиа-области.
Read more »
Filed in Графика by admin | Декабрь 27, 2007 | No Comments