J'écris actuellement une implémentation C # d'un petit programme que j'ai écrit en Java. P>
J'avais utilisé bufferedimage.getrgb (int STARTX, int Starty, int W, int H, int [] rgbarray, int offset, int ScanSize) code> fonction dans mon application Java. Mais je ne pouvais pas exactement trouver une version de cela en C # et je ne suis pas sûr de savoir comment l'écrire manuellement. P>
5 Réponses :
Je pense que le plus proche est bitmap.getpixel (x, y) code> qui renvoie une seule couleur de pixel à un point.
Afin de simuler la fonction Java, vous devrez écrire de l'aide. P>
Cela dépend de la rapidité avec laquelle vous devez le faire.
Si vous devez effectuer un traitement rapide de l'image, vous devez utiliser bitmap code> a
getpixel () code> méthode fonctionnant bien pour un pixel. P>
Lockbits code> que vous pouvez trouver un échantillon ici. P>
Bitmap img = (Bitmap) Image.FromFile(imageFileName);
BitmapData data = img.LockBits(new Rectangle(0,0,img.Width, img.Height), ImageLockMode.ReadWrite, img.PixelFormat);
byte* ptr = (byte*) data.Scan0;
for (int j = 0; j < data.Height; j++)
{
byte* scanPtr = ptr + (j * data.Stride);
for (int i = 0; i < data.width; i++, scanPtr+=NO_OF_CHANNELS)
{
for (int m = 0; m < NO_OF_CHANNELS; m++)
Console.WriteLine(*scanPtr); // value of each channel
}
}
img.UnlockBits(data);
"Cela dépend de la façon dont graisses b> vous devez le faire." Si vous préférez avoir laissé vos fautes d'orthographe, alors vous avez juste besoin de dire.
@Lazarus no probs. Pour une raison quelconque, qui a également supprimé mon code que j'ai collé. Merci d'avoir supprimé mon faute d'orthographe - j'ai réparé mon code.
Je remarque dans le journal d'édition qu'il indique que j'ai supprimé l'échantillon de code, je ne l'ai pas fait. Il n'était pas présent lors de la décision de modifier votre faute de frappe et n'était pas présent dans la fenêtre d'édition. Curieuse. Un artefact d'édition simultanée?
@Lazarus éventuellement. Et je ne peux pas penser à une solution vraiment.
Vous devrez peut-être vérifier p>
Vérifiez également Conversion d'un tableau de pixels vers un image en c # . p>
Vous utiliseriez bitmap.lockbits pour obtenir un accès direct aux pixels dans un bitmap. Voici un exemple de mise en oeuvre, il renvoie une ligne de numérisation à partir du bitmap transduit en tant qu'ob []:
Il n'y a pas d'équivalent direct dans la structure .NET à cette méthode. Toutefois, si votre image est un système.Drawing.bitmap, vous pouvez appeler la méthode Lockbits, ce qui rendra une structure bitmapData contenant l'adresse de la première ligne de numérisation. Vous pouvez ensuite l'utiliser pour créer ce qui devrait être une enveloppe compatible API. Je suppose que vous utilisez C # 3.5 ou plus, alors j'utilise une méthode d'extension - si vous utilisez une saveur plus ancienne, changez-la en une méthode régulière en supprimant la "Ceci" de l'argument bitmap:
Bitmap foo = Bitmap.FromFile(@"somefile.jpg") as Bitmap; int[] rgbArray = new int[100]; foo.getRGB(1, 1, 10, 10, rgbArray, 0, 10);