Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    (c#) Bitmap RotateTransform

    salve e buona giornata a tutti .
    Riesco a far ruotare con successo una immagine ma con la conseguente perdita di pixel cioe la foto sbiadisce progressivamente ,non so come posso evitarlo !
    Vi ringrazio anticipatamente per ogni vostro interessamento .




    codice:
     using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            
            public long  angolo_rotazione;
          
            public Bitmap foto_gira = new Bitmap(Properties.Resources.Download__1_);
          
    
     
            public Form1()
            {
                InitializeComponent();
              
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                angolo_rotazione = angolo_rotazione + 5;           
    
    
    
                Graphics graf = Graphics.FromImage(foto_gira);
                graf.TranslateTransform((float)foto_gira.Width / 2, (float)foto_gira.Height / 2);
    
                graf.RotateTransform(angolo_rotazione );
    
    
                 graf.TranslateTransform(-(float)foto_gira.Width / 2, -(float)foto_gira.Height / 2);
    
                 graf.DrawImage(foto_gira, new PointF(0, 0));            
    
                 pictureBox1.Image = foto_gira;         
    
    
    
                 angolo_rotazione  = 0;
               
                
               
                
    
                
    
    }
    
          
    
    
           
    
            
            
        }
    }

  2. #2
    È normale, dato che la rotazione è un'operazione con perdita di informazione (e ripetere più rotazioni in quella maniera ti fa perdere via via sempre più informazione). Quello che puoi fare è conservare sempre l'immagine originale, e ruotarla dell'angolo "complessivo" ogni volta (invece di applicare via via le singole rotazioni).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Si la tua analisi e corretta , ma quando cerco di fare quello che mi hai suggerito l´immagine resta ferma , non ruota piu´, oppure salvandole progressivamente il risultato , la perdita di dati non si arresta ,----ahhh adesso ho capito !! e la progressione dell´angolo di rotazione che deve incrementarsi o vice.. ma il bitmap deve essere sempre costantemente ripreso cioe sempre lo stesso .. e cosi ?

  4. #4
    Esatto; tieni in una variabile l'angolo di rotazione a cui sei "arrivato", e per costruire l'immagine ruotata riparti sempre dall'immagine originale.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Si e cosi che bisogna fare , qualche volta fa bene parlarne ,con chi ha piu lucidita´. grazie credo si tutto , postero il codice , appena finito !
    w HTML.it ciao

  6. #6
    Detto fatto.. cosi e ok


    codice:
     private void button1_Click(object sender, EventArgs e)
            {
    
                angolo_rotazione = angolo_rotazione + 5;
    
                Bitmap foto_gira = new Bitmap(Properties.Resources.Download__1_); <--- questa e la riga permette di richiamare la foto allo stato originale  ogni volta 
    
                Graphics graf = Graphics.FromImage(foto_gira);
                graf.TranslateTransform((float)foto_gira.Width / 2, (float)foto_gira.Height / 2);
    
                graf.RotateTransform(angolo_rotazione );
    
    
                 graf.TranslateTransform(-(float)foto_gira.Width / 2, -(float)foto_gira.Height / 2);
    
                 graf.DrawImage(foto_gira, new PointF(0, 0));            
    
                 pictureBox1.Image = foto_gira;         
    
    
    
              
               
                
               
                
    
                
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.