147
147
PaletteBitOrder: TRawImageBitOrder;
148
148
PaletteByteOrder: TRawImageByteOrder;
150
// don't use a contructor here, it will break compatebility with a record
150
// don't use a constructor here, it will break compatibility with a record
154
procedure Init_BPP1(AWidth, AHeight: integer);
157
procedure Init_BPP16_R5G6B5(AWidth, AHeight: integer);
159
// Formats in RGB order
160
procedure Init_BPP24_R8G8B8_BIO_TTB(AWidth, AHeight: integer);
161
procedure Init_BPP24_R8G8B8_BIO_TTB_UpsideDown(AWidth, AHeight: integer);
162
procedure Init_BPP32_A8R8G8B8_BIO_TTB(AWidth, AHeight: integer);
163
procedure Init_BPP32_R8G8B8A8_BIO_TTB(AWidth, AHeight: integer);
165
// Formats in Windows pixels order: BGR
153
166
procedure Init_BPP24_B8G8R8_BIO_TTB(AWidth, AHeight: integer);
154
167
procedure Init_BPP24_B8G8R8_M1_BIO_TTB(AWidth, AHeight: integer);
155
168
procedure Init_BPP32_B8G8R8_BIO_TTB(AWidth, AHeight: integer);
229
242
Positions: array of TRawImagePosition;
231
// don't use a contructor here, it will break compatibility with a record
244
// don't use a constructor here, it will break compatibility with a record
232
245
procedure Init(AWidth, AHeight: cardinal; ABitsPerPixel: Byte; ALineEnd: TRawImageLineEnd; ALineOrder: TRawImageLineOrder);
233
246
function GetPosition(x, y: cardinal): TRawImagePosition;
235
248
PRawImageLineStarts = ^TRawImageLineStarts;
238
RawImageColorFormatNames: array[TRawImageColorFormat] of string = (
244
RawImageByteOrderNames: array[TRawImageByteOrder] of string = (
249
RawImageBitOrderNames: array[TRawImageBitOrder] of string = (
254
RawImageLineEndNames: array[TRawImageLineEnd] of string = (
263
RawImageLineOrderNames: array[TRawImageLineOrder] of string = (
268
251
DefaultByteOrder = {$IFDEF Endian_Little}riboLSBFirst{$ELSE}riboMSBFirst{$ENDIF};
569
564
FillChar(Self, SizeOf(Self), 0);
568
procedure TRawImageDescription.Init_BPP1(AWidth, AHeight: integer);
570
// setup an artificial ScanLineImage with format RGB 24 bit, 24bit depth format
571
FillChar(Self, SizeOf(Self), 0);
574
Depth := 1; // used bits per pixel
577
BitOrder := riboBitsInOrder;
578
ByteOrder := riboLSBFirst;
579
LineOrder := riloTopToBottom;
580
BitsPerPixel := 1; // bits per pixel. can be greater than Depth.
581
LineEnd := rileDWordBoundary;
582
RedPrec := 1; // grey precision
585
GreenShift := 0; // bitshift. Direction: from least to most significant
589
// MaskBitsPerPixel:=0;
592
procedure TRawImageDescription.Init_BPP16_R5G6B5(AWidth, AHeight: integer);
594
// setup an artificial ScanLineImage with format RGB 24 bit, 24bit depth format
595
FillChar(Self, SizeOf(Self), 0);
598
Depth := 16; // used bits per pixel
601
BitOrder := riboBitsInOrder;
602
ByteOrder := riboLSBFirst;
603
LineOrder := riloTopToBottom;
604
BitsPerPixel := 24; // bits per pixel. can be greater than Depth.
605
LineEnd := rileDWordBoundary;
606
RedPrec := 5; // red precision. bits for red
609
GreenShift := 5; // bitshift. Direction: from least to most significant
613
// MaskBitsPerPixel:=0;
616
procedure TRawImageDescription.Init_BPP24_R8G8B8_BIO_TTB(AWidth, AHeight: integer);
618
// setup an artificial ScanLineImage with format RGB 24 bit, 24bit depth format
619
FillChar(Self, SizeOf(Self), 0);
622
Depth := 24; // used bits per pixel
625
BitOrder := riboBitsInOrder;
626
ByteOrder := riboLSBFirst;
627
LineOrder := riloTopToBottom;
628
BitsPerPixel := 24; // bits per pixel. can be greater than Depth.
629
LineEnd := rileDWordBoundary;
630
RedPrec := 8; // red precision. bits for red
633
GreenShift := 8; // bitshift. Direction: from least to most significant
637
// MaskBitsPerPixel:=0;
640
procedure TRawImageDescription.Init_BPP24_R8G8B8_BIO_TTB_UpsideDown(AWidth, AHeight: integer);
642
// setup an artificial ScanLineImage with format RGB 24 bit, 24bit depth format
643
FillChar(Self, SizeOf(Self), 0);
646
Depth := 24; // used bits per pixel
649
BitOrder := riboBitsInOrder;
650
ByteOrder := riboLSBFirst;
651
LineOrder := riloBottomToTop;
652
BitsPerPixel := 24; // bits per pixel. can be greater than Depth.
653
LineEnd := rileDWordBoundary;
654
RedPrec := 8; // red precision. bits for red
657
GreenShift := 8; // bitshift. Direction: from least to most significant
661
// MaskBitsPerPixel:=0;
664
procedure TRawImageDescription.Init_BPP32_A8R8G8B8_BIO_TTB(AWidth, AHeight: integer);
666
// setup an artificial ScanLineImage with format RGB 32 bit, 32bit depth format
667
FillChar(Self, SizeOf(Self), 0);
670
Depth := 32; // used bits per pixel
673
BitOrder := riboBitsInOrder;
674
ByteOrder := riboLSBFirst;
675
LineOrder := riloTopToBottom;
676
BitsPerPixel := 32; // bits per pixel. can be greater than Depth.
677
LineEnd := rileDWordBoundary;
678
RedPrec := 8; // red precision. bits for red
681
GreenShift := 16; // bitshift. Direction: from least to most signifikant
686
// MaskBitsPerPixel := 0;
689
procedure TRawImageDescription.Init_BPP32_R8G8B8A8_BIO_TTB(AWidth, AHeight: integer);
691
// setup an artificial ScanLineImage with format RGB 32 bit, 32bit depth format
692
FillChar(Self, SizeOf(Self), 0);
695
Depth := 32; // used bits per pixel
698
BitOrder := riboBitsInOrder;
699
ByteOrder := riboLSBFirst;
700
LineOrder := riloTopToBottom;
701
BitsPerPixel := 32; // bits per pixel. can be greater than Depth.
702
LineEnd := rileDWordBoundary;
703
RedPrec := 8; // red precision. bits for red
706
GreenShift := 8; // bitshift. Direction: from least to most signifikant
711
// MaskBitsPerPixel := 0;
572
714
procedure TRawImageDescription.Init_BPP24_B8G8R8_BIO_TTB(AWidth, AHeight: integer);
821
963
function TRawImageDescription.AsString: string;
965
function EnumToString(AEnum: TRawImageColorFormat): string;
967
WriteStr(Result, AEnum);
970
function EnumToString(AEnum: TRawImageByteOrder): string;
972
WriteStr(Result, AEnum);
975
function EnumToString(AEnum: TRawImageBitOrder): string;
977
WriteStr(Result, AEnum);
980
function EnumToString(AEnum: TRawImageLineEnd): string;
982
WriteStr(Result, AEnum);
985
function EnumToString(AEnum: TRawImageLineOrder): string;
987
WriteStr(Result, AEnum);
824
' Format='+RawImageColorFormatNames[Format]
992
' Format='+EnumToString(Format)
825
993
+' HasPalette->'+dbgs(PaletteColorCount <> 0)
826
994
+' HasMask->'+dbgs(PaletteColorCount <> 0)
827
995
+' Depth='+IntToStr(Depth)
828
996
+' Width='+IntToStr(Width)
829
997
+' Height='+IntToStr(Height)
830
+' BitOrder='+RawImageBitOrderNames[BitOrder]
831
+' ByteOrder='+RawImageByteOrderNames[ByteOrder]
832
+' LineOrder='+RawImageLineOrderNames[LineOrder]
833
+' LineEnd='+RawImageLineEndNames[LineEnd]
998
+' BitOrder='+EnumToString(BitOrder)
999
+' ByteOrder='+EnumToString(ByteOrder)
1000
+' LineOrder='+EnumToString(LineOrder)
1001
+' LineEnd='+EnumToString(LineEnd)
834
1002
+' BitsPerPixel='+IntToStr(BitsPerPixel)
835
1003
+' BytesPerLine->'+IntToStr(GetBytesPerLine(Width,BitsPerPixel,LineEnd))
836
1004
+' RedPrec='+IntToStr(RedPrec)
845
1013
+' MaskBitsPerPixel='+IntToStr(MaskBitsPerPixel)
846
1014
+' MaskShift='+IntToStr(MaskShift)
847
+' MaskLineEnd='+RawImageLineEndNames[MaskLineEnd]
848
+' MaskBitOrder='+RawImageBitOrderNames[MaskBitOrder]
1015
+' MaskLineEnd='+EnumToString(MaskLineEnd)
1016
+' MaskBitOrder='+EnumToString(MaskBitOrder)
849
1017
+' MaskBytesPerLine->'+IntToStr(GetBytesPerLine(Width,MaskBitsPerPixel,MaskLineEnd))
850
1018
+' ~~~palette~~~'
851
1019
+' PaletteColorCount='+IntToStr(PaletteColorCount)
852
1020
+' PaletteBitsPerIndex='+IntToStr(PaletteBitsPerIndex)
853
1021
+' PaletteShift='+IntToStr(PaletteShift)
854
+' PaletteLineEnd='+RawImageLineEndNames[PaletteLineEnd]
855
+' PaletteBitOrder='+RawImageBitOrderNames[PaletteBitOrder]
856
+' PaletteByteOrder='+RawImageByteOrderNames[PaletteByteOrder]
1022
+' PaletteLineEnd='+EnumToString(PaletteLineEnd)
1023
+' PaletteBitOrder='+EnumToString(PaletteBitOrder)
1024
+' PaletteByteOrder='+EnumToString(PaletteByteOrder)
857
1025
+' PaletteBytesPerLine->'+IntToStr(GetBytesPerLine(Width,PaletteBitsPerIndex,PaletteLineEnd))