Temat: [C++ NET 2.0] Zmiana rozdzielczości obrazka, przy...

Czy mógłby mi ktoś podpowiedzieć, w jaki sposób zmienić rozdzielczość obrazka, bez zmiany kolorów ?
Już kilkanaście godzin próbuję zmieniać różne ustawienia instancji obiektu Graphics czy to SmoothingMode czy PixelOffsetMode ... (co więcej nawet ręcznie zmieniałem "rozciągłość" na Matrix’e) a i tak i siak obrazek zostaje rozmazany, gdy mi zależy na zachowaniu kolorów, a nie na tzw. „Quality”.

W kodzie, który napisałem wykomentowałem sposoby, jakich próbowałem. Wiem, że można by to rozwiązać prostym algorytmem, ale interesuje mnie rozwiązanie w NET. Proszę o pomoc.

private: System::Drawing::Image^ Resize(System::Drawing::Image^ Img, int Width, int Height)
{
Stream^ strm = gcnew MemoryStream( 1000 );
Bitmap^ Bmp = gcnew Bitmap(Img);
Bitmap^ BmpSeld = gcnew Bitmap(Width, Height);

RectangleF^ rSource = gcnew RectangleF(0, 0, Img->Width, Img->Height);
RectangleF^ rDestination = gcnew RectangleF(0, 0, Width, Height);


//Matrix^ matx = gcnew Matrix();
//matx->Scale(2, 1);
//gras->Transform = matx;

Graphics^ gras = Graphics::FromImage(BmpSeld);
//gras->InterpolationMode = InterpolationMode::None;
//gras->SmoothingMode = SmoothingMode::None;
//gras->PixelOffsetMode = PixelOffsetMode::None;
//gras->CompositingQuality = CompositingQuality::None;

gras->DrawImage(Bmp,*rDestination, *rSource, GraphicsUnit::Pixel);



BmpSeld->Save(strm, ImageFormat::Png);
return Image::FromStream(strm);
}

konto usunięte

Temat: [C++ NET 2.0] Zmiana rozdzielczości obrazka, przy...

`Piotr Sowa edytował(a) ten post dnia 12.02.12 o godzinie 16:11

Temat: [C++ NET 2.0] Zmiana rozdzielczości obrazka, przy...

Niestety to nie jest rozwiązanie problemu (img 1.0), to jest problem, gdyż moim priorytetem jest nie jak we wszystkicg tych googlowanych przykładach "Quality", tylko odwrotność - jego strata.

Na obrazkiu zaznaczyłem problem, gdyż w mojej aplikacji muszę odwzorować tylko i wyłącznie jeden dany kolor przy powiększeniu, i nie mogą się pojawić odcienie.

IMG 1.0
//Białe plamy w czerwonych okręgach to obszar z prawidłowo odwzorowany.
//Taki efekt otrzymuję

Obrazek


IMG 2.0
//Taki efekt chcę uzyskać

Obrazek
Mateusz Grzelak edytował(a) ten post dnia 20.04.11 o godzinie 20:42
Rafał Korszuń

Rafał Korszuń co-owner @ Kleder

Temat: [C++ NET 2.0] Zmiana rozdzielczości obrazka, przy...

wybierz sobie i sprawdź w którym trybie jest najlepiej

http://msdn.microsoft.com/en-us/library/system.drawing...
Zygmunt Rynduch

Zygmunt Rynduch .NET/Sharepoint
Developer, (nie
szukam pracy ale jak
się ...

Temat: [C++ NET 2.0] Zmiana rozdzielczości obrazka, przy...

Otóż to.

Sam porobiłem parę testów i wychodzi na to pożądany efekt można uzyskać przy:


g.InterpolationMode = InterpolationMode.NearestNeighbor;


A tutaj przykładowa metoda:


public Image Resize(Image src, int percentage)
{
Bitmap bmp = new Bitmap(src.Width * percentage / 100, src.Height * percentage / 100);

Graphics g = Graphics.FromImage((Image)bmp);

g.InterpolationMode = InterpolationMode.NearestNeighbor;

g.DrawImage(src, 1, 1, bmp.Width, bmp.Height);

g.Dispose();

return (Image)bmp;
}
Zygmunt Rynduch edytował(a) ten post dnia 21.04.11 o godzinie 09:58

Temat: [C++ NET 2.0] Zmiana rozdzielczości obrazka, przy...

"g.InterpolationMode = InterpolationMode.NearestNeighbor;"

To jest pożądane rozwiązanie. Dzięki! Teraz działa jak należy.
Za dużo było tych opcji i nie wpadłem na to, że interpolacja ma być Nearest a nie Low.

Następna dyskusja:

Pomoc przy projektowaniu we...




Wyślij zaproszenie do