Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > картинка из буфера обмена


Автор: klyaksa 13.9.2011, 18:41
Код

if not (Clipboard.HasFormat(CF_BITMAP) or  Clipboard.HasFormat(CF_METAFILEPICT) or  Clipboard.HasFormat(CF_PICTURE))
then  begin

  Picture := TPicture.Create;
  try
      Picture.Assign(Clipboard);
      if assigned(Picture.Graphic) then
      Picture.SaveToFile('Имя файла'+'???расширение???');
  finally
    Picture.Free;
  end;
end;


Как узнать что за картинка в буфере, чтобы расширение задать?

Автор: klyaksa 13.9.2011, 19:48
GrExt :=  GraphicExtension(TGraphicClass(Picture.Graphic.ClassType)) почему-то возвращает bmp, хотя копирую в буфер Png.

Автор: MetalFan 14.9.2011, 07:53
Цитата(klyaksa @  13.9.2011,  19:48 Найти цитируемый пост)
почему-то возвращает bmp, хотя копирую в буфер Png

Предположу, что нет такого формата данных буфера, как PNG. Поэтому и копируется из буфера bmp.

Автор: Snowy 14.9.2011, 09:58
Обычно, при копировании картинки в буфер, копируется также BMP вариант картинки, либо только BMP.
Зависит от программы, которая помещала рисунок в буфер.

Автор: klyaksa 14.9.2011, 11:35
Вопрос меняется: копируется в буфер обмена картинка PNG (хотя может быть и другой формат). Как получить из буфера изображение как было, а не в bmp.

Автор: Snowy 14.9.2011, 12:15
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  buf: array[0..60] of Char;
  n: Integer;
  fmt: Word;
  name: string[30];
begin
  Memo1.Clear;
  for n := 0 to Clipboard.FormatCount - 1 do
  begin
    fmt := Clipboard.Formats[n];
    if GetclipboardFormatName(fmt, buf, Pred(Sizeof(buf))) <> 0 then
      Memo1.Lines.Add(StrPas(buf))
    else
    begin
      case fmt of
        1: name := 'CF_TEXT';
        2: name := 'CF_BITMAP';
        3: name := 'CF_METAFILEPICT';
        4: name := 'CF_SYLK';
        5: name := 'CF_DIF';
        6: name := 'CF_TIFF';
        7: name := 'CF_OEMTEXT';
        8: name := 'CF_DIB';
        9: name := 'CF_PALETTE';
        10: name := 'CF_PENDATA';
        11: name := 'CF_RIFF';
        12: name := 'CF_WAVE';
        13: name := 'CF_UNICODETEXT';
        14: name := 'CF_ENHMETAFILE';
        15: name := 'CF_HDROP (Win 95)';
        16: name := 'CF_LOCALE (Win 95)';
        17: name := 'CF_MAX (Win 95)';
        $0080: name := 'CF_OWNERDISPLAY';
        $0081: name := 'CF_DSPTEXT';
        $0082: name := 'CF_DSPBITMAP';
        $0083: name := 'CF_DSPMETAFILEPICT';
        $008E: name := 'CF_DSPENHMETAFILE';
        $0200..$02FF: name := 'частный формат';
        $0300..$03FF: name := 'Объект GDI';
      else
        name := IntToHex(fmt, 4);
      end;
      Memo1.Lines.Add(name);
    end;
  end;
end;

Этот код показывает, какие форматы у тебя в буфере.
Вряд ли там найдётся PNG... Скорее BMP и DIB.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)