IWritableBitmapDataRowWriteRawT Method
Namespace: KGySoft.Drawing.ImagingAssembly: KGySoft.Drawing.Core (in KGySoft.Drawing.Core.dll) Version: 10.0.0-rc.1
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()
- x Int32
- The x-coordinate of the value within the row to write. The valid range depends on the size of T.
- data T
- The raw value to write.
- T
- The type of the value to write. Must be a value type without managed references.
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 IWritableBitmapData instance.
To determine the actual pixel size use the PixelFormat property of the parent IWritableBitmapData instance.
If
T is a primitive type of size greater than 1 byte (for example
int,
float, etc.),
then the address determined by the
x coordinate should be aligned to the size of
T. On most platforms misalignment affects only performance,
but depending on the architecture, the operation may have an unexpected result, or even a
DataMisalignedException can be thrown.
The following example demonstrates how to write multiple pixels by a single
WriteRaw call:
using IReadWriteBitmapData bmp4bppIndexed = BitmapDataFactory.CreateBitmapData(1, 1, KnownPixelFormat.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));
See also the example at the
Examples section of the
IReadableBitmapDataRow.ReadRaw method.
| 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. |