Загрузите Jpg/Gif/Bitmap и преобразуйте в Битовый массив

Это для разработчика, если вы не разработчик, вы также можете проверить текущий тип страницы. Вы просто должны осмотреть конкретную страницу и увидеть тег body. Если тема создана с использованием основных правил WordPress, то в теге body есть классы, связанные со страницей или одной страницей. Эти классы могут включать тип сообщения, имя шаблона, имя файла, идентификатор страницы и многое другое.

16
задан M.M 6 December 2014 в 13:05
поделиться

3 ответа

Я нашел способ попроще! Он автоматически загружает файлы JPG / GIF / BMP и т. Д., Даже не зная / не проверяя формат файла, и конвертирует его соответственно. У меня это сработало отлично.

Поделиться здесь :)

Uses
Classes, ExtCtrls, Graphics, axCtrls;

Procedure TForm1.Button1Click(Sender: TObject);
Var
     OleGraphic               : TOleGraphic;
     fs                       : TFileStream;
     Source                   : TImage;
     BMP                      : TBitmap;
Begin
     Try
          OleGraphic := TOleGraphic.Create; {The magic class!}

          fs := TFileStream.Create('c:\testjpg.dat', fmOpenRead Or fmSharedenyNone);
          OleGraphic.LoadFromStream(fs);

          Source := Timage.Create(Nil);
          Source.Picture.Assign(OleGraphic);

          BMP := TBitmap.Create; {Converting to Bitmap}
          bmp.Width := Source.Picture.Width;
          bmp.Height := source.Picture.Height;
          bmp.Canvas.Draw(0, 0, source.Picture.Graphic);

          image1.Picture.Bitmap := bmp; {Show the bitmap on form}
     Finally
          fs.Free;
          OleGraphic.Free;
          Source.Free;
          bmp.Free;
     End;
End;
14
ответ дан 30 November 2019 в 15:15
поделиться

Вы не можете использовать TPicture.LoadFromFile , если вы не знаете, какой формат имеет изображение, так как этот метод использует расширение файла, чтобы определить, какой из зарегистрированных изображений форматы необходимо загрузить. Есть причина, по которой нет подходящего метода TPicture.LoadFromStream .

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

Быстрое и грязное решение - попробовать несколько форматов, с которыми вам нужно работать, пока один из них не удастся:

function TryLoadPicture(const AFileName: string; APicture: TPicture): boolean;
const
  GraphicClasses: array[0..3] of TGraphicClass = (
    TBitmap, TJPEGImage, TGIFImage, TPngImage);
var
  FileStr, MemStr: TStream;
  ClassIndex: integer;
  Graphic: TGraphic;
begin
  Assert(APicture <> nil);
  FileStr := TFileStream.Create('D:\Temp\img.dat', fmOpenRead);
  try
    MemStr := TMemoryStream.Create;
    try
      MemStr.CopyFrom(FileStr, FileStr.Size);
      // try various
      for ClassIndex := Low(GraphicClasses) to High(GraphicClasses) do begin
        Graphic := GraphicClasses[ClassIndex].Create;
        try
          try
            MemStr.Seek(0, soFromBeginning);
            Graphic.LoadFromStream(MemStr);
            APicture.Assign(Graphic);
            Result := TRUE;
            exit;
          except
          end;
        finally
          Graphic.Free;
        end;
      end;
    finally
      MemStr.Free;
    end;
  finally
    FileStr.Free;
  end;
  Result := FALSE;
end;

Изменить:

В библиотеке GraphicEx есть пример convert , который использует

GraphicClass := FileFormatList.GraphicFromContent(...);

для определения графического формата. Это кажется очень похожим на способ VB6, о котором вы упомянули.

9
ответ дан 30 November 2019 в 15:15
поделиться

Delphi 2009 поставляется со встроенной поддержкой JPEG, BMP, GIF и PNG.

Для более ранних версий Delphi вам, возможно, потребуется найти сторонние реализации для PNG и GIF, но в Delphi 2009 вы просто добавляете блоки Jpeg , pngimage и GIFImg в свой раздел uses.

Если файл имеет расширение, вы можете использовать следующий код, как отметили другие, TPicture.LoadFromFile смотрит на расширения, зарегистрированные унаследованными классами, чтобы определить, какое изображение загружать.

uses
  Graphics, Jpeg, pngimage, GIFImg;

procedure TForm1.Button1Click(Sender: TObject);
var
  Picture: TPicture;
  Bitmap: TBitmap;
begin
  Picture := TPicture.Create;
  try
    Picture.LoadFromFile('C:\imagedata.dat');
    Bitmap := TBitmap.Create;
    try
      Bitmap.Width := Picture.Width;
      Bitmap.Height := Picture.Height;
      Bitmap.Canvas.Draw(0, 0, Picture.Graphic);
      Bitmap.SaveToFile('C:\test.bmp');
    finally
      Bitmap.Free;
    end;
  finally
    Picture.Free;
  end;
end;

Если расширение файла неизвестно, один из методов - посмотреть первые несколько байтов, чтобы определить тип изображения.

procedure DetectImage(const InputFileName: string; BM: TBitmap);
var
  FS: TFileStream;
  FirstBytes: AnsiString;
  Graphic: TGraphic;
begin
  Graphic := nil;
  FS := TFileStream.Create(InputFileName, fmOpenRead);
  try
    SetLength(FirstBytes, 8);
    FS.Read(FirstBytes[1], 8);
    if Copy(FirstBytes, 1, 2) = 'BM' then
    begin
      Graphic := TBitmap.Create;
    end else
    if FirstBytes = #137'PNG'#13#10#26#10 then
    begin
      Graphic := TPngImage.Create;
    end else
    if Copy(FirstBytes, 1, 3) =  'GIF' then
    begin
      Graphic := TGIFImage.Create;
    end else
    if Copy(FirstBytes, 1, 2) = #$FF#$D8 then
    begin
      Graphic := TJPEGImage.Create;
    end;
    if Assigned(Graphic) then
    begin
      try
        FS.Seek(0, soFromBeginning);
        Graphic.LoadFromStream(FS);
        BM.Assign(Graphic);
      except
      end;
      Graphic.Free;
    end;
  finally
    FS.Free;
  end;
end;
35
ответ дан 30 November 2019 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: