Obiekt Gdiplus::Image* img wczytany (utworzony) z pliku.
Wykonuję na nim jakieś zmiany i próbuję zapisać je do TEGO SAMEGO pliku.
image->Save(...)
Zwraca błąd 'Win32Error'.
Jak się domyślam plik jest otwarty tylko do odczytu i dopóki nie zniszczę img to nie mogę do niego pisać. Ale niszczenie img przed zapisem jest bez sensu.
Jedyne co wymyśliłem to utworzyć bitmapę (bmp) z kopią img, zniszczyć img i zapisać bmp do pliku (przykład poniżej). Jednak musiałbym też przepisać wszystkie metadane (zależy mi na nich) a to jeszcze bardziej skomplikuje zapis.
Czy jest prostszy sposób na zapisanie img do tego samego pliku z którego został utworzony?
Przykład zapisu z wykorzystaniem bitmapy:
{
String plik = "C:\\Plik.jpg";
Gdiplus::Status status;
CLSID clsid;
Gdiplus::Image* img = new Gdiplus::Image(plik.w_str());
// tu wykonuję modyfikacje na 'image1'
// przepisanie img >> bmp
Gdiplus::Bitmap* bmp = new Gdiplus::Bitmap(img->GetWidth(), img->GetHeight(), PixelFormat32bppARGB);
GGraphics graf (bmp);
graf.DrawImage(img, 0, 0);
// niszczenie img
delete img;
// zapis do pliku
GetEncoderClsid(L"image/jpeg", &clsid);
status = bmp->Save(plik.w_str(), &clsid);
if (status)
Beep();
delete bmp;
}
PS
Utworzenie nowego obiektu przez Gdiplus::Image* img2 = img->Clone() i zniszczenie img nic nie daje ponieważ nie da się pisać do pliku zanim nie usunie się img2 .