2012-03-14 5 views
0

Je pense que cela doit être une question facile pour quelqu'un qui utilise le bitmap en C++. J'ai mon code de travail en C# - comment faire quelque chose de simillar en C++ ?? Merci pour vos codes (aide) :-))Bitmap en C# en C++

public Bitmap Visualize() 
{ 


    PixelFormat fmt = System.Drawing.Imaging.PixelFormat.Format24bppRgb; 
    Bitmap result = new Bitmap(Width, Height, fmt); 

    BitmapData data = result.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadOnly, fmt); 
    unsafe 
    { 
    byte* ptr; 

    for (int y = 0; y < Height; y++) 
    { 
     ptr = (byte*)data.Scan0 + y * data.Stride; 

     for (int x = 0; x < Width; x++) 
     { 
      float num = 0.44; 
      byte c = (byte)(255.0f * num); 
      ptr[0] = ptr[1] = ptr[2] = c; 


      ptr += 3; 
     } 
    } 
    } 
    result.UnlockBits(data); 

    return result; 

} 

Répondre

1

La traduction brute en C++/CLI, je n'ai pas exécuté l'exemple de sorte qu'il peut contient quelques typo. Quoi qu'il en soit, il existe différentes façons d'obtenir le même résultat en C++ (car vous pouvez utiliser l'API CRT standard).

Bitmap^ Visualize() 
{ 
    PixelFormat fmt = System::Drawing::Imaging::PixelFormat::Format24bppRgb; 
    Bitmap^ result = gcnew Bitmap(Width, Height, fmt); 

    BitmapData^ data = result->LockBits(Rectangle(0, 0, Width, Height), ImageLockMode::ReadOnly, fmt); 
    for (int y = 0; y < Height; y++) 
    { 
    unsigned char* ptr = reinterpret_cast<unsigned char*>((data->Scan0 + y * data->Stride).ToPointer()); 

    for (int x = 0; x < Width; x++) 
    { 
     float num = 0.44f; 
     unsigned char c = static_cast<unsigned char>(255.0f * num); 
     ptr[0] = ptr[1] = ptr[2] = c; 

     ptr += 3; 
    } 
    } 

    result->UnlockBits(data); 

    return result; 

} 
0

Vous pouvez faire des boucles très similaires en utilisant la bibliothèque Easy BMP

0

C++ ne contient rien en référence à des images ou des images de traitement. De nombreuses bibliothèques sont disponibles pour cela, et la façon dont vous travaillez sur les données peut être différente pour chacun.

À son niveau le plus basique, une image se compose d'un groupe d'octets. Si vous ne pouvez extraire que les données (pas les en-têtes ou autres métadonnées) dans un unsigned char[] (ou un autre type approprié selon le format de votre image), vous pouvez parcourir chaque pixel comme vous l'avez fait dans votre exemple C#.