Avatar billede ddobbeltv Nybegynder
08. januar 2004 - 17:58 Der er 8 kommentarer og
1 løsning

System.Drawing laver grimme scaleringer.. hvorfor ?

Jeg er ved at lave et upload system ... efter man har uploadet et billede, skal det scaleres til 350 i breddenog converteres til jpeg, samt laves tumbnails...

Men hvorfor bliver billederne grimme og utydelige ??? er der noget man kan gøre for at forhindre dette ??? siden skal bruges til at modeller kan uploade billeder af dem selv, så det dur ikke de alle er grumset i ansigtet...

Jeg bruger GetThumbnailImage til begge scaleringer...

nogen der har en løsning ?=
Avatar billede ddobbeltv Nybegynder
08. januar 2004 - 17:59 #1
Avatar billede burningice Nybegynder
08. januar 2004 - 21:43 #2
GetThumbNailImage er, som navnet antyder, kun til thumbnail.. og her er kvaliteten ikke særlig god. Du skal istedet manuelt sætte din Height og Width på billedet... så bliver det pænt scaleret.
Avatar billede ddobbeltv Nybegynder
08. januar 2004 - 21:56 #3
men hvordan scalere jeg det så ?

Jeg tænker på.. jeg har mit image objekt.. men hvilken funktion scalere ? jeg har læst noget om man kan bruge noget imagecodec og encoder stuff før man gemmer sit billede.. det skulle give de samme muligheder som med feks. Photoshop hvor man kan vælge en værdi mellem 1 og 100 til jpeg...

er der nogen der har nogle eksempler af det ?`

/Jacob Jensen
Avatar billede burningice Nybegynder
08. januar 2004 - 22:13 #4
scalering ?! det er da bare at sætte din height og width, så klarer gdi+ resten:

Image img = Bitmap.FromFile("bla.jpg");

img.Width = 350;
img.Height = // Ja, det må du så selv regne ud, for at billedet holder sin ratio

img.Save("bla_small.jpg")
Avatar billede ddobbeltv Nybegynder
09. januar 2004 - 17:27 #5
ok.. kender du til at bruge de forskellige encoders.. jeg tænker specielt på Quality og Compressor (jpg) se evt : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawingimagingencoderclasscompressiontopic.asp

Jeg kan ikke få det til at virke :(..

Pointene er dine.. ville bare lige fange din opmærksomhed...

Men kender du noget til compressor ?
Avatar billede ddobbeltv Nybegynder
09. januar 2004 - 17:33 #6
desuden får jeg en fejl når jeg bruger img.Width.. den siger den er skrive beskyttet ?

CS0200: Property or indexer 'System.Drawing.Image.Width' cannot be assigned to -- it is read only
Avatar billede burningice Nybegynder
11. januar 2004 - 14:13 #7
hm... well, så har jeg da en rutine til det som du kan bruge... bruges på denne måde:

Bitmap orig = //dit billede
Bitmap resized = Resize(orig, bredde, højde, false);

public static Bitmap Resize(Bitmap b, int nWidth, int nHeight, bool bBilinear)
        {
            Bitmap bTemp = (Bitmap)b.Clone();
            b = new Bitmap(nWidth, nHeight, bTemp.PixelFormat);

            double nXFactor = (double)bTemp.Width/(double)nWidth;
            double nYFactor = (double)bTemp.Height/(double)nHeight;

            if (bBilinear)
            {
                double fraction_x, fraction_y, one_minus_x, one_minus_y;
                int ceil_x, ceil_y, floor_x, floor_y;
                Color c1 = new Color();
                Color c2 = new Color();
                Color c3 = new Color();
                Color c4 = new Color();
                byte red, green, blue;

                byte b1, b2;

                for (int x = 0; x < b.Width; ++x)
                    for (int y = 0; y < b.Height; ++y)
                    {
                        // Setup

                        floor_x = (int)Math.Floor(x * nXFactor);
                        floor_y = (int)Math.Floor(y * nYFactor);
                        ceil_x = floor_x + 1;
                        if (ceil_x >= bTemp.Width) ceil_x = floor_x;
                        ceil_y = floor_y + 1;
                        if (ceil_y >= bTemp.Height) ceil_y = floor_y;
                        fraction_x = x * nXFactor - floor_x;
                        fraction_y = y * nYFactor - floor_y;
                        one_minus_x = 1.0 - fraction_x;
                        one_minus_y = 1.0 - fraction_y;

                        c1 = bTemp.GetPixel(floor_x, floor_y);
                        c2 = bTemp.GetPixel(ceil_x, floor_y);
                        c3 = bTemp.GetPixel(floor_x, ceil_y);
                        c4 = bTemp.GetPixel(ceil_x, ceil_y);

                        // Blue
                        b1 = (byte)(one_minus_x * c1.B + fraction_x * c2.B);

                        b2 = (byte)(one_minus_x * c3.B + fraction_x * c4.B);
                       
                        blue = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                        // Green
                        b1 = (byte)(one_minus_x * c1.G + fraction_x * c2.G);

                        b2 = (byte)(one_minus_x * c3.G + fraction_x * c4.G);
                       
                        green = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                        // Red
                        b1 = (byte)(one_minus_x * c1.R + fraction_x * c2.R);

                        b2 = (byte)(one_minus_x * c3.R + fraction_x * c4.R);
                       
                        red = (byte)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));

                        b.SetPixel(x,y, System.Drawing.Color.FromArgb(255, red, green, blue));
                    }
            }
            else
            {
                for (int x = 0; x < b.Width; ++x)
                    for (int y = 0; y < b.Height; ++y)
                        b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),(int)(Math.Floor(y * nYFactor))));
            }

            return b;
        }
Avatar billede ddobbeltv Nybegynder
13. januar 2004 - 16:49 #8
takker.. skal lige have et svar
Avatar billede burningice Nybegynder
14. januar 2004 - 16:18 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester