Note
This example requires to reference the KGySoft.Drawing package. When targeting .NET 7 or later it can be executed on Windows only.
void WriteRaw<T>(
int x,
T data
)
where T : struct, new()
Sub WriteRaw(Of T As {Structure, New}) (
x As Integer,
data As T
)
generic<typename T>
where T : value class, gcnew()
void WriteRaw(
int x,
T data
)
abstract WriteRaw :
x : int *
data : 'T -> unit when 'T : struct, new()
This method writes the actual raw underlying data. T can have any size so you by using this method you can write multiple pixels as well as individual color channels.
To determine the row width in bytes use the RowSize property of the parent IReadableBitmapData instance.
To determine the actual pixel size use the PixelFormat property of the parent IWritableBitmapData instance.
using (Bitmap bmp4bppIndexed = new Bitmap(8, 1, PixelFormat.Format4bppIndexed))
using (IReadWriteBitmapData bitmapData = bmp4bppIndexed.GetReadWriteBitmapData())
{
IReadWriteBitmapDataRow row = bitmapData[0];
// Writing as uint writes 8 pixels at once in case of a 4 BPP indexed bitmap:
row.WriteRaw<uint>(0, 0x12345678);
// because of little endianness and 4 BPP pixel order the color indices will be printed
// in the following order: 7, 8, 5, 6, 3, 4, 1, 2
for (int x = 0; x < bitmapData.Width; x++)
Console.WriteLine(row.GetColorIndex(x));
}
ArgumentOutOfRangeException | x is less than zero or the memory location of the value (considering the size of T) at least partially exceeds the bounds of the current row. |