Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1129618430
vuk
2005-10-18 10:53
2005.11.06
Тут эта... Tony Levin Band в Москву приезжает...


6-1121720841
LexaDup
2005-07-19 01:07
2005.11.06
Нахождение клиентом сервера


2-1129199319
Dust
2005-10-13 14:28
2005.11.06
Значение формальных и фактических параметров различается!!!!!!!!!


1-1129475629
navinavi
2005-10-16 19:13
2005.11.06
Изменение формата ячеек Excel я


4-1125504553
moyavital
2005-08-31 20:09
2005.11.06
Програмно открыть ComboBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский