bogdans napisał(a)
Problemem jest to, że plik zapisany w formacie jpg jest różny od tego co widać na ekranie,ponadto w każdej przeglądarce plików graficznych różni się od plików zapisanych w formacie gif oraz png.
Znasz jakąś prawidłową metodę zapisywania obiektów klasy Image do plików ?
O ile pamiętam, to była zamieszczona nawet tu na forum nie dalej jak pół roku temu (od takiego czasu tu jestem...).
Natomiast był to dość długi kod ponieważ java nie zawiera kodera JPEG, a tylko dekoder. Tak więc było tam dopasowywanie formatu, kwantyzacja, odrzucanie i parę innych rzeczy. Nie przyglądałem się temu zbytnio jednak bo robienie obsługi znanych formatów danych, to dla mnie raczej strata czasu. Jest conajmniej kilkanaście darmowych implementacji zarówno w C, C++ i ze dwie w Javie.
bogdans napisał(a)
BTW, z twoją krytyką metody w dużym stopniu się nie zgadzam - zapisując widziany na ekranie obraz oczekuję że jak sobie ten plik otworzę (potem, na innym komputerze), to zobaczę mniej więcej to samo.
Ja też decyduję o formacie pliku, a nie format oryginalnego pliku graficznego.
Założenie świetne i prawidłowe. Tyle, że nie takim sposobem. Używając tak zaimplementowanej metody o formacie pliku decydujesz nie ty, ale de facto system operacyjny. Jeżeli odpaliłbyś to jako RMI, to byłoby nawet gorzej - o formacie mógłby decydować zupełnie inny komputer, o którego ustawieniach nie miałbyś zasadniczo pojęcia.
Zapisywany obraz powinien bazować na informacjach pliku źródłowego z jednego powodu - tracisz najmniejsza ilość informacji. Poza tym co z grafiką o rozdzielczościach bardzo małych lub bardzo dużych? Takich, których umieszczanie w całości na ekranie nie ma najmniejszego sensu. Ba, co z obrazkami, których wielkość po rozpakowaniu jest tak duża, że pamięć obrazu współczesnych kart graficznych nie podoła? A przecież i takie pliki trzeba czasem obrabiać (np. mapy satelitarne). Bazowanie na danych wprost ze źródła (co nie oznacza na formacie) ma jeszcze większe znaczenie na formatach stratnych.
Na koniec - Wiązanie zapisywanego pliku obrazka z planami graficznymi konkretnego urządzenia wyświetlającego nie jest zbyt dobre. O formacie powinieneś decydować ty - tworząc pusty obraz o porządanych przez Ciebie cechach formatu, typie danych rastra, palety, alfa (i czego tam jeszcze) oraz drukując na nim obrazek, który chcesz skonwertować. Wtedy dopiero można go kompresować w formacie plikowym i zapisywać na dysk. W każdym razie tak to się robiło kiedyś w C.