Laden...

Bitmap strecken

Erstellt von Kasperdelasopa vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.303 Views
K
Kasperdelasopa Themenstarter:in
118 Beiträge seit 2006
vor 15 Jahren
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ß

4.221 Beiträge seit 2005
vor 15 Jahren

Nimm mal GetThumbNail von hier:
ImageListBox

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

Gelöschter Account
vor 15 Jahren

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

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

K
Kasperdelasopa Themenstarter:in
118 Beiträge seit 2006
vor 15 Jahren

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ß

Gelöschter Account
vor 15 Jahren

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?

K
Kasperdelasopa Themenstarter:in
118 Beiträge seit 2006
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

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 😃

D
78 Beiträge seit 2007
vor 15 Jahren

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;
    }
Gelöschter Account
vor 15 Jahren
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?

D
78 Beiträge seit 2007
vor 15 Jahren
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! 😃

Gelöschter Account
vor 15 Jahren

ah sry jetzt sehe ich es auch 😃

888 Beiträge seit 2007
vor 15 Jahren
D
78 Beiträge seit 2007
vor 15 Jahren

Schau mal hier im vorletzen Beitrag:


>

Was ist der Vorteil gegenüber meiner Methode?

Gelöschter Account
vor 15 Jahren

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

D
78 Beiträge seit 2007
vor 15 Jahren

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

Sehr sinnig...