Показать сообщение отдельно
  #1  
Старый 12.12.2014, 19:35
Last Living Man Last Living Man вне форума
Прохожий
 
Регистрация: 10.11.2011
Сообщения: 25
Репутация: 513
По умолчанию GDI+ TGPImage и буфер обмена

Доброе время суток. У меня возникла проблема копирования/вставки изображений из буфера обмена в классы GDI+ (TGPImage и TGPBitmap).

Вот что примерно у меня получилось, но это по моему слишком громоздко:
procedure TMainForm.LoadImage;
Код:
var mstr: TMemoryStream;
    istr: IStream;
    bmp: TBitmap;
begin
  CloseImage;
  mstr := TMemoryStream.Create;
  bmp  := TBitmap.Create;
  try
    bmp.Assign(Clipboard);
    istr := TStreamAdapter.Create(mstr, soOwned) as IStream;
    bmp.SaveToStream(mstr);
    OriginalImg := TGPImage.Create(istr);
    PaintBox.Repaint;
  finally
    FreeAndNil(bmp);
  end;
end;

и вот еще:
Код:
var g:IGPGraphics;
    b:TBitmap;
    j:TJPEGImage;
    dRect: TGPRectF;
begin
  b := TBitmap.Create;
  b.Width := WidthSpEdt.Value;
  b.Height := HeightSpEdt.Value;
  j := TJPEGImage.Create;
  g := TGPGraphics.Create(b.Canvas.Handle);
  g.InterpolationMode := InterpolationModeHighQualityBicubic;
  dRect.Initialize(0,0, b.Width, b.Height);
  try
    g.DrawImage(OriginalImg, dRect);
    with j do
    begin
      CompressionQuality  := 100;
      Performance         := jpBestQuality;
      Scale               := jsFullSize;
      PixelFormat         := jf24Bit;
      Assign(b);
      Compress;
    end;
    Clipboard.Assign(j);
    PaintBox.Repaint;
  finally
    FreeAndNil(b);
    FreeAndNil(j);
  end;
end
;

Надеюсь кто нибудь придумает более оптимальное решение...?
Ответить с цитированием