Доброе время суток. У меня возникла проблема копирования/вставки изображений из буфера обмена в классы 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
;
Надеюсь кто нибудь придумает более оптимальное решение...?