Witam:)
Jest sobie bitmapka (strona imageshack.us przekształciła go na PNG) :
http://img14.imageshack.us/img14/4308/oryginal.png
Wklejam ten obrazek do dokumentu Word-a 2007, zapisuję dokument do pliku.Zamykam plik.
Otwieram ponownie, zaznaczam wklejony obrazek, klikam ikonkę kopiowania do schowka.
Obrazek trafia do schowka jako metafile.
I teraz chciałbym stworzyć taką procedurę, która przemaluje mi ten obrazek zawarty
w schowku (w formacie metafile) na bitmapę, która będzie można zapisać do pliku BMP.
Użyłem typowej procedury, która to wykonuje:
procedure Metafile_Ze_Schowka_Do_BMP( Path_BMP: TFileName);
var
MetaFile: TMetafile;
BMP: TBitmap;
begin
Metafile:=TMetaFile.Create;
BMP:=TBitmap.Create;
try
BMP.PixelFormat:=pf24bit;
MetaFile.Assign(Clipboard);
BMP.Height:=MetaFile.Height;
BMP.Width:=MetaFile.Width;
// BMP.Canvas.Draw(0, 0, MetaFile); //alternatywny sposób
PlayEnhMetaFile(BMP.Canvas.Handle, MetaFile.Handle, Rect(0,0, MetaFile.Width, MetaFile.Height));
BMP.SaveToFile(Path_BMP);
finally
BMP.Free;
MetaFile.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
If Clipboard.HasFormat(CF_METAFILEPICT) then Metafile_Ze_Schowka_Do_BMP( 'c:\obrazek.bmp');
end;
Niestety okazuje się, że rozmiary bitmapy zapisanej do pliku znacznie się różnią od
wymiarów oryginalnego obrazka wstawionego do dokumentu Worda 2007.
Oto jak wygląda taki obrazek (otwarty w Paincie):
http://img38.imageshack.us/img38/9274/zprocedury.png
Widać, że jest znacznie większy.
Co ciekawe, jak skopiuje w Wordzie 2007 obrazek do schowka i bezpośrednio wkleję do Painta,
to obrazek jest niemlże identyczny z oryginałem, pojawiło się tylko niewielkie białe obramowanie
wokół oryginalnej treści obrazka:
http://img514.imageshack.us/img514/2842/wpainciex.png
ale gdyby udało mi się coś takiego uzyskać, to już by było super:
Oznacza to, że istnieje możliwość w miarę wiernego odtworzenia obrazka z zawartości schowka
w formie Metafile'a.
Cała tajemnica tkwi w tym, jak z Metafile'a wydostać oryginalne wymiary bitmapy w nim zawartej,
choć za pomocą podglądu schowka (clipbrd.exe) można zobaczyć, że taka bitmapa matefile'owa
jest w nim rozciągliwa.
Dodam, że obrazki mogą mieć różne rozmiary, więc nie bardzo można przypisać stałych
rozmiarów bitmapy, na której ma być malowany MetaFile.
Może jest jakaś inna metoda wydostania bitmapy w oryginalnych wymiarach z Metafile'a?
Proszę o wskazówki:)
Pzdr.
Marogo