Laden...

Bitmap strecken

Letzter Beitrag vor 15 Jahren 15 Posts 2.317 Views
Bitmap strecken

Hallo,

ich suche nach einer sauberen Möglichkeit ein Bitmap zu strecken.

Ich habe schon folgendes versucht:



//Skalierungsfaktor ermitteln
float scale = (float)pic_width / filled_pixels_width;

//neues Bitmap mit der gewünschten Größe erstellen (kleineres Bild)
Bitmap btemp = new Bitmap(filled_pixels_width,pic_height);

//neues Graphics Objekt aus Bitmap erstellen
Graphics gt = Graphics.FromImage(btemp);

//Bildauschnitt aus orginalbild in btemp reinzeichnen
gt.DrawImage(pic, new Rectangle(0, 0, filled_pixels_width, pic_height), new Rectangle(0, 0, filled_pixels_width, pic_height), GraphicsUnit.Pixel);

//Bild Transformieren
gt.ScaleTransform(scale, 1);


klappt aber ned das Bild bleibt so klein wie es war.

Damit das keiner vermutet:

pic_width = 350
filled_pixels_width = 300

also ist scale größer als 1 nämlich 1,166

Gruß

Nimm mal GetThumbNail von hier:
ImageListBox

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

http://www.bobpowell.net/imagefileconvert.htm

du musst nur noch einbauen, das er ein größeres bild abspeichert.

Hallo,

das ist ja im Prinzip das was ich tue.

Und der Kommentar

du musst nur noch einbauen, das er ein größeres bild abspeichert

Hilft mir leider auch nicht. Da ich ja genanu hierfür eine Idee bräuchte.

Gruß

anstatt den originalgrößen musst du nur noch deine gewünschte größe bei dem drawtobitmap eingeben... wo also ist das problem??

edit:

Und der Kommentar

Zitat:
du musst nur noch einbauen, das er ein größeres bild abspeichert

Hilft mir leider auch nicht. Da ich ja genanu hierfür eine Idee bräuchte.

und du bist sicher, das du dir den code angesehen hast?

Sorry,
aber bei dem Code deines Links findet sich niergens was mit "drawtobitmap".

Wenn du aber meinst, ich soll ein Bitmap erstellen in der Größe wie ich das haben will und in ds Bitmap dann mit Graphics.DrawImage das kleinere Bild reinmale, beweikt das kein strecken des Bildes.

Es wird das Bild in der gleichen größe in das Bild reingezeichnet und der rest des Bildes bleicbt leer.

vieleicht habe ich dich aber auch nur falsch verstanden

Wenn du aber meinst, ich soll ein Bitmap erstellen in der Größe wie ich das haben will und in ds Bitmap dann mit Graphics.DrawImage das kleinere Bild reinmale, beweikt das kein strecken des Bildes.

Es wird das Bild in der gleichen größe in das Bild reingezeichnet und der rest des Bildes bleicbt leer.

noe, das macht nämlich DrawImageUnscaled. Ich ahbe mich zwar mit dem drawtobitmap vertan aber du hast ja selbst die richtige methode gefunden 😃

Sowas?


public static Image ScaleBitmap( Image src, Size size, bool keepAspect )
    {
      if ( src == null )
        throw new ArgumentNullException( "src" );

      if ( size.Width == 0 || size.Height == 0 )
        throw new ArgumentException( "invalid image size" );
      
      float sx = 1f;
      float sy = 1f;

      if ( src.Width > 0 )
        sx = ( float )size.Width / src.Width;

      if ( src.Height > 0 )
        sy = ( float )size.Height / src.Height;

      if ( keepAspect )
        sx = sy = Math.Min( sx, sy );

      Rectangle srcRect = Rectangle.Round(new RectangleF( 0f, 0f, ( float )src.Width * sx, ( float )src.Height * sy ));
      Bitmap result = keepAspect ?
        new Bitmap( srcRect.Width, srcRect.Height, src.PixelFormat ) : new Bitmap( size.Width, size.Height, src.PixelFormat );

      using ( Graphics g = Graphics.FromImage( result ) )
      {
        g.DrawImage( src, srcRect );
      }

      return result;
    }
Bitmap result = keepAspect ?
        new Bitmap( srcRect.Width, srcRect.Height, src.PixelFormat ) : new Bitmap( size.Width, size.Height, src.PixelFormat );

wo liegt der unterschied zwischen true/false?

Bitmap result = keepAspect ?  
        new Bitmap( srcRect.Width, srcRect.Height, src.PixelFormat ) : new Bitmap( size.Width, size.Height, src.PixelFormat );  

wo liegt der unterschied zwischen true/false?

Schau halt nochmal genau hin! 😃

ah sry jetzt sehe ich es auch 😃

Schau mal hier im vorletzen Beitrag:


>

Was ist der Vorteil gegenüber meiner Methode?

die interpolationsmethode würde ich nach flüchtigem überfliegen sagen.

die interpolationsmethode würde ich nach flüchtigem überfliegen sagen.

Sehr sinnig...