| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- //
- // System.Drawing.Imaging.BitmapData.cs
- //
- // Author:
- // Miguel de Icaza ([email protected]
- //
- // (C) 2002 Ximian, Inc. http://www.ximian.com
- //
- using System;
- using System.Runtime.InteropServices;
- using System.IO;
- namespace System.Drawing.Imaging
- {
- [StructLayout(LayoutKind.Sequential)]
- public sealed class BitmapData {
- internal int width, height, stride;
- internal PixelFormat pixel_format;
- internal IntPtr address;
- internal int reserved;
- private bool bAllocated = false;
- internal bool own_scan0;
-
- ~BitmapData()
- {
- if (bAllocated)
- Marshal.FreeHGlobal(address);
- }
-
- internal bool Allocated {
- set {bAllocated = value;}
- }
-
- public int Height {
- get {
- return height;
- }
- set {
- height = value;
- }
- }
- public int Width {
- get {
- return width;
- }
- set {
- width = value;
- }
- }
- public PixelFormat PixelFormat {
- get {
-
- return pixel_format;
- }
- set {
- pixel_format = value;
- }
- }
- public int Reserved {
- get {
- return reserved;
- }
- set {
- reserved = value;
- }
- }
- public IntPtr Scan0 {
- get {
- return address;
- }
- set {
-
- if (bAllocated)
- {
- Marshal.FreeHGlobal(address);
- bAllocated = false;
- }
-
- address = value;
- }
- }
- public int Stride {
- get {
- return stride;
- }
- set {
- stride = value;
- }
- }
-
- internal unsafe void swap_red_blue_bytes ()
- {
- byte *start = (byte *) (void *) this.Scan0;
- int stride = this.Stride;
- for (int line = 0; line < this.Height; line++){
- // Exchange red <=> blue bytes
- // fixed (byte *pbuf = start) {
- byte* curByte = start;
- for (int i = 0; i < this.Width; i++) {
- byte t = *(curByte+2);
- *(curByte+2) = *curByte;
- *curByte = t;
- curByte += 3;
- }
- // }
- start += stride;
- }
- }
- }
- }
|