Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизКак работать граф.файл pcx формата? Найти похожие ветки
← →
Денис (2005-10-12 22:48) [0]TJPEGImage.create,TBitmap.create - с этим все понятно но как с PCX подскажите пожалуйста?
← →
ЮЮ © (2005-10-13 05:51) [1]Искать TPCXImage, естественно :)
← →
Defunct © (2005-10-13 12:48) [2]За 10 минут написанная функция. Можете ее оптимизировать:
procedure LoadPCX( FileName : String; DestBitmap : TBitmap );
type
TPCXPalette = Array[0..255] of TColor;
var
PCXPalette : TPCXPalette;
Stream : TFileStream;
i, j : integer;
R, G, B: byte;
PCXWidth, PCXHeight : Word;
Color : TColor;
SectionLength : Integer;
begin
with TFileStream.Create( FileName, fmOpenRead ) do
try
Position := 8;
Read( PCXWidth, 2);
Read( PCXHeight, 2);
Position := Size - 768; // Seek to PCX palette location
{ Loading PCX palette }
for i := 0 to 255 do
begin
Read( R, 1);
Read( G, 1);
Read( B, 1);
PCXPalette[i] := RGB(R, G, B);
end;
Position := 128; // Seek to PCX data
DestBitmap.Width := PCXWidth;
DestBitmap.Height := PCXHeight;
DestBitmap.PixelFormat := pf24bit;
{ Loading PCX image }
SectionLength := 0;
for j := 0 to PCXHeight do
for i := 0 to PCXWidth do
begin
if SectionLength = 0 then
begin
Read(B, 1);
if B < 192 then
begin
Color := PCXPalette[ B ];
DestBitmap.Canvas.Pixels[i, j] := Color
end
else
begin
SectionLength := B - 192;
Dec( SectionLength );
Read(B, 1);
Color := PCXPalette[ B ];
DestBitmap.Canvas.Pixels[i, j] := Color
end;
end
else
begin
Dec( SectionLength );
DestBitmap.Canvas.Pixels[i, j] := Color
end
end
finally
free
end;
end;
Пример применения:procedure TForm1.Button1Click(Sender: TObject);
var
Bmp : TBitmap;
begin
if OpenDialog1.Execute then
begin
Bmp := TBitmap.Create;
try
LoadPCX( OpenDialog1.FileName, Bmp );
Canvas.Draw(0,0, Bmp);
finally
Bmp.Free;
end;
end;
end;
← →
Amoeba © (2005-10-13 12:55) [3]Или использвать библиотеку GraphicEx
http://www.delphi-gems.com/Graphics.php
← →
Денис (2005-10-13 14:02) [4]Спасибочки большое!
← →
Денис (2005-10-13 22:20) [5]ваша программа без изьяна,но извиняюсь за нахальство, а как теперь pcx вытянуть из моего *.res файла?
С bmp-я делаю так
MPicB[d]:=TBitMap.Create;ResStream:=TResourceStream.CreateFromID(HInstance,c,RT_RCDATA);
MPicB[d].LoadFromStream(ResStream);
а как с pcx?
← →
Zeqfreed © (2005-10-13 23:14) [6]Денис (13.10.05 22:20) [5]
Пускай это будет твоим домашним заданием.
Подсказка: следует почитать раздел справки о TFileStream и связанные с ним (See Also) разделы; а так же, поглядеть получше на представленный код.
← →
Defunct © (2005-10-14 15:48) [7]Денис (13.10.05 22:20) [5]
сделайте тогда так:
procedure LoadPCXfromStream( Stream: TStream; DestBmp : TBitmap);
в var секции уберите Stream : TFileStream (он там и изначально был не нужен).
и поменяйте код так:
вместо
with TFileStream.Create( ... ) do
try
..
finally
free
end
напишите:
with Stream do
begin
...
end;
← →
Денис (2005-10-16 00:30) [8]Уважаемый Zeqfreed я посмотрел help в раздел справки о TFileStream и связанные с ним (See Also) разделы и ни че не понял, я только начинающий и с классоми еще не работал...
Defunct - спасибо за код, но не могли бы представить это, как в первый раз в работающем примере у меня ни чего не выходит "я только начинающий "
исправил как вы сказали, но ничего не выходит:
begin
with Stream do
begin
Position := 8;
Read( PCXWidth, 2);
Read( PCXHeight, 2);
Position := Size - 768; // Seek to PCX palette location
{ Loading PCX palette }
for i := 0 to 255 do
begin
Read( R, 1);
Read( G, 1);
Read( B, 1);
PCXPalette[i] := RGB(R, G, B);
end;
Position := 128; // Seek to PCX data
DestBitmap.Width := PCXWidth;
DestBitmap.Height := PCXHeight;
DestBitmap.PixelFormat := pf24bit;
{ Loading PCX image }
SectionLength := 0;
for j := 0 to PCXHeight do
for i := 0 to PCXWidth do
begin
if SectionLength = 0 then
begin
Read(B, 1);
if B < 192 then
begin
Color := PCXPalette[ B ];
DestBitmap.Canvas.Pixels[i, j] := Color
end
else
begin
SectionLength := B - 192;
Dec( SectionLength );
Read(B, 1);
Color := PCXPalette[ B ];
DestBitmap.Canvas.Pixels[i, j] := Color
end;
end
else
begin
Dec( SectionLength );
DestBitmap.Canvas.Pixels[i, j] := Color
end
end
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp : TBitmap;
ResStream:TResourceStream;
St: TStream;
begin
Bmp := TBitmap.Create;
try
// St:=TStream.CreateFromID(HInstance,1,RT_RCDATA);
LoadPCXfromStream( St, Bmp );
Canvas.Draw(0,0, Bmp);
finally
Bmp.Free;
end;
end;
← →
Денис (2005-10-16 00:40) [9]пишу свою игрушку "маджонг", она работает, хотелось бы чтоб она занимала мин.обьем, пользуюсь выводом графики ч.з.:
BitBlt..SrcAnd);
BitBlt..SRCPaint);
формат BMP-большой,а при переходе на jpg глюки из за того что jpg на белом фоне не похож на jpg на черном фоне, единственное pcx формат помог он и весит меньше и соответствует по-pixel-но, может что подскажете по поводу....
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c