Gdiplus::Bitmap de tableau d'OCTETS?
Voici ma tentative (laid GDI+ et GDI mix...)
//...
BYTE pixels[BMP_WIDTH * BMP_HEIGHT * BMP_BPP];
HBITMAP hBitmap;
Gdiplus::Bitmap cBitmap(BMP_WIDTH, BMP_HEIGHT, PixelFormat32bppRGB);
Gdiplus::Graphics cGraphics(&cBitmap);
Gdiplus::Pen cPen(Gdiplus::Color(255, 255, 0, 0));
cGraphics.DrawRectangle(&cPen, 0, 0, cBitmap.GetWidth() - 1, cBitmap.GetHeight() - 1);
//and here it get's real ugly, I'd like to change that...
cBitmap.GetHBITMAP(Gdiplus::Color(255, 255, 255), &hBitmap);
GetBitmapBits(hBitmap, sizeof(pixels), pixels);
//...
Quelqu'un m'a dit d'utiliser LockBits mais je n'ai vraiment pas à comprendre comment. Je l'ai essayé, mais je n'ai pas réussi donc je ne vais pas poster cette tentative, trop.
OriginalL'auteur Oliver Baur | 2010-07-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Bitmap::LockBits
pour obtenir l'accès à raw d'un tableau de données. Ici vous avez pu lire sur la façon d'utiliserBitmap::LockBits
.OriginalL'auteur Kirill V. Lyadvinsky
Le code suivant obtient tous les pixels d'une image:
OriginalL'auteur SaeidMo7
Avez-vous essayé de fournir les octets lorsque vous créez l'image bitmap:
stride % 4 == 0
dans le cas général (pas tous les 3 composantes RVB).OriginalL'auteur GarethOwen
Voici comment j'allais le faire à l'aide de GDIPlus Bitmap.LockBits méthode définie dans l'en-tête GdiPlusBitmap.h:
Avis que, puisque les bitmaps sont généralement DWORD aligné vous pouvez défausser cette inutilisés de données qui a été nécessaire pour l'alignement, comme malat correctement commenté..
bitmapData.Stride
est différente debitmapData.Width * sizeof( bitmapData.PixelFormat)
, car il contient également les données inutilisées. Cela nécessite une boucle for pour jeter les données inutilisées.OriginalL'auteur rmp