Главная » 2D графика » Обзор формата DIB и компонентов для работы с ним

RSS

Обзор формата DIB и компонентов для работы с ним

Не нравитсяНравится   Рейтинг 0

TFastDIB

Компонент состоит из следующих модулей:

fastdib.pas updated: 8/24/2000 версия v3.56 Gordon Cowie
fastfx.pas updated: 7/15/2000 Gordon Cowie
fastquant.pas updated: 7/7/99 Gordon Alex Cowie III
fastsize.pas updated: 8/19/99 Gordon Cowie

Сам класс TFastDIB находится в модуле fastdib.pas, он является наследником TObject. Я выделю наиболее интересные свойства, процедуры и функции присущие данному классу:

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
procedure Assign(Bmp:TFastDIB);
property Pixels[y,x:Integer]:TFColor read GetPixel write SetPixel;
property PixelsB[y,x:Integer]:Byte read GetPixelB write SetPixelB;
procedure SetSize(fWidth,fHeight:Integer;fBpp:Byte);
procedure SetSizeEx(fWidth,fHeight:Integer;fBpp,fBpr,fBpg,fBpb:Byte);
procedure SetSizeIndirect(bmInfo:TBMInfo);
procedure SetInterface(fBits:Pointer; fWidth,fHeight:Integer;fBpp,fBpr,fBpg,fBpb:Byte);
procedure SetInterfaceIndirect(fBits:Pointer;bmInfo:TBMInfo);
procedure SetSubset(fBmp:TFastDIB;x,y,w,h:Integer);
procedure MakeCopy(fBmp:TFastDIB);
 
procedure LoadFromHandle(hBmp:Integer);
procedure LoadFromFile(FileName:string);
procedure LoadFromStream(Stream:TStream);
procedure LoadFromRes(hInst:Integer;ResID,ResType:PChar);
procedure LoadFromClipboard;
procedure SaveToClipboard;
procedure SaveToFile(FileName:string); // Процедуры блиттинка - копирования изображения
procedure UpdateColors;
procedure Draw(fDC,x,y:Integer);
procedure Stretch(fDC,x,y,w,h:Integer);
procedure DrawRect(fDC,x,y,w,h,sx,sy:Integer);
procedure StretchRect(fDC,x,y,w,h,sx,sy,sw,sh:Integer);
procedure MaskDraw(fDC,x,y:Integer;Mono:TFastDIB);
procedure MaskRect(fDC,x,y,w,h,sx,sy,mx,my:Integer;Mono:TFastDIB);
procedure TransDraw(fDC,x,y:Integer;c:TFColor);
procedure TransStretch(fDC,x,y,w,h:Integer;c:TFColor);
procedure AlphaDraw(fDC,x,y:Integer;a:Byte;hasAlpha:Boolean);
procedure AlphaStretch(fDC,x,y,w,h:Integer;a:Byte;hasAlpha:Boolean);
procedure TileDraw(fDC,x,y,w,h:Integer);
// Функции аналогичные работе с GDI
procedure SetPen(Style,Width,Color:Integer);
procedure SetBrush(Style,Hatch,Color:Integer);
procedure SetFont(Font:string;Size:Integer);
procedure SetFontEx (Font:string;Width,Height,Weight:Integer;Italic,Underline,Strike:Boolean);
procedure SetTextColor(Color:Integer);
procedure SetTransparent(Transparent:Boolean);
procedure SetBkColor(Color:Integer);
procedure Ellipse(x1,y1,x2,y2:Integer);
procedure FillRect(Rect:TRect);
procedure LineTo(x,y:Integer);
procedure MoveTo(x,y:Integer);
procedure Polygon(Points:array of TPoint);
procedure Polyline(Points:array of TPoint);
procedure Rectangle(x1,y1,x2,y2:Integer);
procedure TextOut(x,y:Integer;Text:string);
procedure DrawText(Text:string;Rect:TRect;Flags:Integer);

В модуле fastquant находятся процедуры и функции для конвертирования изображения с одним количеством цветов в другое, так же и в градации серое.

Модуль fastfx настоящая находка для любителей спецэффектов. Набор функции примерно такой же как у PhotoShop’а. Смотрите сами:

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
procedure FillLut(var Lut:TLut;x1,y1,x2,y2:Byte);
function MakeWLut(Bmp:TFastDIB;RLut,GLut,BLut:TLut):TWLut;
 
procedure AutoContrast(Bmp:TFastDIB);
procedure RGB(Bmp:TFastDIB;r,g,b:Integer);
procedure Gamma(Bmp:TFastDIB;r,g,b:Extended);
procedure Contrast(Bmp:TFastDIB;r,g,b:Integer);
procedure Lightness(Bmp:TFastDIB;r,g,b:Integer);
function SaturationLut(Amount:Integer):TSaturationLut;
procedure Saturation(Bmp:TFastDIB;Amount:Integer);
procedure Invert(Bmp:TFastDIB);
procedure AddNoise(Bmp:TFastDIB;Amount:Byte;Mono:Boolean);
procedure SplitBlur(Bmp:TFastDIB;Split:Integer);
procedure SplitConvolve(Bmp:TFastDIB;Split,nw,ne,sw,se,m:Integer);
procedure BlurEdges(Bmp:TFastDIB;Split:Integer);
procedure SharpenMore(Bmp:TFastDIB;Split:Integer);
procedure EmbossEdges(Bmp:TFastDIB;Split:Integer);
procedure QuickSoft(Bmp:TFastDIB);
procedure QuickSharp(Bmp:TFastDIB);
procedure QuickEmboss(Bmp:TFastDIB);
procedure Lines(Bmp:TFastDIB;Lut:TLut);
procedure Mosaic(Bmp:TFastDIB;xAmount,yAmount:Integer);
procedure Shift(Bmp:TFastDIB;xAmount,yAmount:Integer);
procedure AlphaBlend(Dst,Src1,Src2:TFastDIB;Amount:Byte);
 
procedure MaskCopy(Back,Sprite,Mask:TFastDIB;x,y,w,h,sx,sy,mx,my:Integer);
procedure MaskCopy32(Back,Sprite:TFastDIB;x,y,w,h,sx,sy:Integer;Multiplied:Boolean);procedure Flip(Bmp:TFastDIB);
procedure Flop(Bmp:TFastDIB);
procedure Rotate90CW(Src,Dst:TFastDIB);
procedure Rotate90CCW(Src,Dst:TFastDIB);
procedure Rotate180(Src,Dst:TFastDIB);
procedure RotateSize(Src,Dst:TFastDIB;Angle:Double);
procedure Transform(Src,Dst:TFastDIB;cx,cy,isin,icos:Integer;Smooth:Boolean);
procedure Rotate(Src,Dst:TFastDIB;Angle:Double;Smooth:Boolean);
procedure Rotozoom(Src,Dst:TFastDIB;Angle:Double;Zoom:Integer;Smooth:Boolean);
procedure SquareWave(Src,Dst:TFastDIB;x,y,z:Double);
procedure RoundWave(Src,Dst:TFastDIB;x,y,z:Double);

TBitmap

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
// Свойства
Canvas
Empty
Handle
HandleType
Height
IgnorePalette
MaskHandle
Monochrome
Palette
PixelFormat
ScanLine
TransparentColor
TransparentMode
Width 	
 
// Методы
Assign
Create
Destroy
Dormant
FreeImage
LoadFromClipboardFormat
LoadFromResourceID
LoadFromResourceName
LoadFromStream
Mask
ReleaseHandle
ReleaseMaskHandle
ReleasePalette
SaveToClipboardFormat
SaveToStream

Не стану детально описывать этот класс, так как это подробно да и лучше сделано в справке Delphi и в некоторых книжках. Какие есть плюсы: во первых это стандартный компонент, написанный Borland – нет нужды искать другие компоненты, полная совместимость, меньше ошибок в коде. Второе: присутствуют все необходимые процедуры и свойства, ничего лишнего. Это и является главным минусом – все спец эффекты приходится писать самому. При работе с TBitmap постоянно такое чувство, что чего-то не хватает :)
Для тех кто хочет спустится ниже уровня TBitmap, посоветую изучить раздел TBitmap->Bitmap Functions в справке WinAPI ( файл Win32.hlp ).

TUniDIB

Простенький класс, с минимальным набором функций, наследник TObject.

Состоит из следующих модулей:

UniDIB.pas updated 1/4/99 version 1.21 Vit Kovalcik
DIBTools.pas updated 1/4/99 version 1.21 Vit Kovalcik

В первом модуле находится непосредственно сам класс. У данного класса доступны следующие процедуры и свойства:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
constructor Create (AWidth,AHeight:LongInt;ABPP:Byte;SByteUse:Byte);
procedure DIBtoScreen(DC:hDC);
procedure SetPalette(Pal:TLogPalette256);
procedure Clear;
procedure DrawHorizLine(X1,X2,Y,Col:Integer);
procedure DrawVertLine (X,Y1,Y2,Col:Integer);
procedure DrawLine (X1,Y1,X2,Y2:integer; Col:Integer);
procedure FillPolygon (Poly:Array of TPoint; FillCol:Integer);
procedure CaptureScreen;
property ActPointer:Pointer read FActPointer write FActPointer;
property Bits:Pointer read FBits;
property DC:HDC read FDC;
property DWordWidth:Cardinal read FDWordWidth;
property Handle:HBITMAP read FHandle;

При работе с TUniDib можно заметить одно неудобство. Процедура DIBtoScreen копирует сразу все изображение, что практически ни когда не нужно. В процедуре не хватает x,y координат и исходного Rect-а для вывода. Хотя это можно обойти переписав процедуру DIBtoScreen, так как она осуществляет простой вызов BITBLT или, что более предпочтительно, использовать Handle на HBitmap. Второй способ лучше тем, что Вы не меняете оригинальный код и соответственно не теряется совместимость.

Во втором модуле DIBTools.pas содержатся всего две процедуры для загрузки из BMP и из PCX файла. Нужно отметить, что это единственный компонент поддерживающий формат PCX.

Страницы : 1 2 3 4 5 6

Таги: ,