Avatar billede trumf Nybegynder
24. november 2006 - 09:22 Der er 9 kommentarer og
1 løsning

thumpnail af gif

Hejsa E

Jeg bruger thumbnailImage til at lave jpg mindre, men kan ikke lige få gifferne med, da den funktion ikke er god til dem. Jeg har derfor delt det op i to.

if (getContentType(image) == "image/gif")
                makeGifThumpnail(file, Convert.ToInt16(imgWidth), Convert.ToInt16(imgHeight));
            else
                makeThumbnail(image, Convert.ToInt16(imgWidth), Convert.ToInt16(imgHeight));

makeThumbnail udskriver billedet til siden med:
Response.ContentType = contentType;
Response.BinaryWrite(imageContent);
Men hvordan gør jeg det med den til giffer. Jeg har forsøgt med med følgende, men kan ikke lige finde ud af at få det sidste med.

        private void makeGifThumpnail(string file, int imgWidth, int imgHeight)
        {
            Bitmap bitmap = new Bitmap(file);

            // Create rectangle for displaying image.
            Rectangle destRect = new Rectangle(0, 0, imgWidth, imgHeight);

            // Draw image to screen.
            //e.Graphics.DrawImage(bitmap, destRect);
        }

Håber en kan hjælpe med at få det til at virke.

På forhånd tak :)
Avatar billede nheilbuth Nybegynder
24. november 2006 - 10:01 #1
Jeg løste det nogenlunde sådan her (der er muligvis noget dobbeltkonfekt i det, men det virker :D):

private void makeGifThumpnail(string file, int imgWidth, int imgHeight)
    {
      System.Drawing.Image img = System.Drawing.Image.FromFile(file);

      Bitmap bitmap = new Bitmap(imgWidth, imgHeight, PixelFormat.Format16bppRgb555);

      Graphics g = Graphics.FromImage(bitmap);
      g.CompositingQuality = CompositingQuality.HighQuality;
      g.SmoothingMode = SmoothingMode.HighQuality;
      g.InterpolationMode = InterpolationMode.HighQualityBicubic;
     
      Rectangle destRect = new Rectangle(0, 0, imgWidth, imgHeight);

      g.DrawImage(img, rec);
  }

Jeg bruger så bitmap.Save("filnavn"); til at gemme billedet, men den burde vel også kunne sættes ind i en BinaryWrite.
Avatar billede nheilbuth Nybegynder
24. november 2006 - 10:02 #2
Glemte lige at sige at den også virker med bmp, png og jpg, så du burde ikke behøve 2 forskellige metoder.
Avatar billede trumf Nybegynder
24. november 2006 - 10:22 #3
Super, men jeg får en lille fejl: The name 'CompositingQuality' does not exist in the current context.

Jeg kan ikke umiddelbart se hvilket namespace jeg har glemt her...
Avatar billede trumf Nybegynder
24. november 2006 - 10:42 #4
System.Drawing.Drawing2D :)

Jeg har lige lavet den lidt om så den passer i min term.

private void makeGifThumpnail(string file, int imgWidth, int imgHeight)
{
    Image image = Image.FromFile(file);
    Bitmap bitmap = new Bitmap(imgWidth, imgHeight, PixelFormat.Format16bppRgb555);

    Graphics g = Graphics.FromImage(bitmap);
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.SmoothingMode = SmoothingMode.HighQuality;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

    Rectangle destRect = new Rectangle(0, 0, imgWidth, imgHeight);

    g.DrawImage(image, destRect);
    Response.ContentType = getContentType(image);
    Response.BinaryWrite(image);

    image.Dispose();
}

Jeg får to fejl i linien: Response.BinaryWrite(image); med streg under response og image.

The best overloaded method match for 'System.Web.HttpResponse.BinaryWrite(byte[])' has some invalid arguments

cannot convert from 'System.Drawing.Image' to 'byte[]'
Avatar billede nheilbuth Nybegynder
24. november 2006 - 11:07 #5
og den fejl fik du ikke før når du brugte Response.BinaryWrite(imageContent);?
Avatar billede trumf Nybegynder
24. november 2006 - 11:58 #6
Nu virker det næsten

private void makeGifThumpnail(string file, int imgWidth, int imgHeight)
{
    Image image = Image.FromFile(file);
    ImageFormat format = image.RawFormat;

    Bitmap bitmap = new Bitmap(imgWidth, imgHeight, PixelFormat.Format16bppRgb555);

    Graphics g = Graphics.FromImage(bitmap);
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.SmoothingMode = SmoothingMode.HighQuality;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

    Rectangle destRect = new Rectangle(0, 0, imgWidth, imgHeight);

    g.DrawImage(image, destRect);
    Response.ContentType = getContentType(image);
    image.Save(Response.OutputStream, format);

    image.Dispose();
}

Men det viser billedet uden at det er blevet mindre...
Hvis jeg skriver:
g.Save(Response.OutputStream, format);
i stedet for
image.Save(Response.OutputStream, format);
får jeg fejlen:
No overload for method 'Save' takes '2' arguments
Avatar billede trumf Nybegynder
24. november 2006 - 12:07 #7
Så virker det :)

private void makeGifThumpnail(string file, int imgWidth, int imgHeight)
{
    Image image = Image.FromFile(file);
    ImageFormat format = image.RawFormat;
    Bitmap bitmap = new Bitmap(imgWidth, imgHeight, PixelFormat.Format16bppRgb555);

    Graphics g = Graphics.FromImage(bitmap);
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.SmoothingMode = SmoothingMode.HighQuality;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;

    Rectangle destRect = new Rectangle(0, 0, imgWidth, imgHeight);
    g.DrawImage(image, destRect);
    Response.ContentType = getContentType(image);
    bitmap.Save(Response.OutputStream, format);

    image.Dispose();
    bitmap.Dispose();
}

Hvad siger du, skal vi dele i porten. Nu kan du også skrive thumbnails ud på web og ikke "kun" gemme dem ?
Avatar billede nheilbuth Nybegynder
24. november 2006 - 12:09 #8
Hehe, det er helt fint. Jeg går ikke så meget op i point.

Herligt du fik det til at virke!
Avatar billede trumf Nybegynder
24. november 2006 - 12:19 #9
Ved du hvad, du skal sgu have det hele. Det er ret fedt at det virker, den har stået stille i ret lang tid og så er det også weekend. Kan du have det godt :)
Avatar billede nheilbuth Nybegynder
24. november 2006 - 12:44 #10
Jammen så siger jeg tak. God weekend! :D
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