В моем приложении я храню данные Bitmap
в двумерном целочисленном массиве (int[,]
).Для доступа к значениям R, G и B я использую что-то вроде этого:
// read:
int i = _data[x, y];
byte B = (byte)(i >> 0);
byte G = (byte)(i >> 8);
byte R = (byte)(i >> 16);
// write:
_data[x, y] = BitConverter.ToInt32(new byte[] { B, G, R, 0 }, 0);
Я использую целочисленные массивы вместо фактических System.Drawing.Bitmap
, потому что мое приложение работает на устройствах Windows Mobile, где память доступна длясоздание растровых изображений строго ограничено.
Мне интересно, однако, было бы более разумно объявить такую структуру:
public struct RGB
{
public byte R;
public byte G;
public byte B;
}
... и затем использовать массивRGB
вместо массива int
.Таким образом, я мог легко читать и записывать отдельные значения R, G и B без необходимости сдвига битов и преобразования битов.Я смутно помню кое-что из давних времен, когда переменные byte
были выровнены по блокам в 32-битных системах, так что byte
на самом деле занимает 4 байта памяти вместо 1 (но, возможно, это было просто в Visual Basic).
Будет ли использование массива структур (как пример RGB
выше) быстрее, чем использование массива целых, и будет ли оно использовать 3/4 памяти или в 3 раза больше памяти целых?