Oprettet ons. d. 21. november 2007 kl. 11:06:26

sholm
sholm (16.155 point. Point ude: 0)

Resize jpg uden tab af kvalitet

Hej

Jeg har en upload funktion som resizer mine billeder, jeg har dog et par problemer med den.
1) Billedkvaliteten bliver ringere end originalen.
2) Billedet kommer til at fylde mere end originalen.

Jeg bruger denne funktion til resize:
private Bitmap resizeFile(Bitmap b, int MaxHeight, int MaxWidth)
{
  int nWidth = b.Width;
  int nHeight = b.Height;
  if (nHeight > MaxHeight)
  {
    nWidth = (int)((((double)b.Width) / ((double)b.Height)) * ((double)MaxHeight));
    nHeight = MaxHeight;
  }
  if (nWidth > MaxWidth)
  {
    nWidth = MaxWidth;
    nHeight = (int)((((double)b.Height) / ((double)b.Width)) * ((double)MaxWidth));
  }
  Bitmap bTemp = (Bitmap)b.Clone();
  b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  double nXFactor = (double)bTemp.Width / (double)nWidth;
  double nYFactor = (double)bTemp.Height / (double)nHeight;
  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;
  }

Nogen der har en ide til hvordan jeg kan forbedre funktionen?

Skrevet ons. d. 21. november 2007 kl. 11:16:54| #1

benni_b
benni_b (10.180 point)
tja..

b = new Bitmap(nWidth, nHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
kunne måske ændres til
b = new Bitmap(nWidth, nHeight, bTemp.PixelFormat);

Skrevet ons. d. 21. november 2007 kl. 11:24:18| #2

pidgeot
pidgeot (51.189 point)
Der er flere elementer i dette:

1) Din resize-rutine laver "nearest-neighbor" skalering, hvilket giver et særdeles dårligt resultat hvis du ikke skalerer med en heltalsfaktor (det gør det nu under alle omstændigheder, men ikke HELT så slemt). Du vil næsten med sikkerhed få et bedre resultat med en bedre skaleringsrutine (eks. bicubic).
2) 1) bliver gjort værre af at din kilde er JPG, der er lossy - du kan med andre ord sagtens ende med at have fået fat på en pixel der ikke har ret meget at gøre med den farve du forventede.
3) Det fremgår ikke hvor du konverterer til JPG (så en mulighed er jo at du slet ikke gør det, og det altså er et BMP-billede du ender op med - det kunne forklare filstørrelsen), men der hvor du gør det, skal du nok tweake lidt på kvaliteten du fortæller JPG-encoderen at den skal bruge.

Skrevet lør. d. 28. januar 2012 kl. 22:35:31| #3


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

GridView og RowCommand

Oprettet den 22. maj 2012 kl. 17.34
faran giver 30 point for svar | Giv et svar »

Flere betingelser i repeater.

Oprettet den 15. maj 2012 kl. 21.45
fuldstop giver 60 point for svar | Giv et svar »

kombinere code behind og Javascript

Oprettet den 6. maj 2012 kl. 09.02
tjacob giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger