Доброе время суток. У меня возникла проблема копирования/вставки изображений из буфера обмена в классы GDI+ (TGPImage и TGPBitmap).
Вот что примерно у меня получилось, но это по моему слишком громоздко:
procedure TMainForm.LoadImage;
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 ;
|
и вот еще:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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
|
;
Надеюсь кто нибудь придумает более оптимальное решение...?