public void ResizeBuffer(ResizePivot pivot, int width, int height, Color backColor) { if (width == _width && height == _height) return; PixelBuffer newBuffer = new PixelBuffer(width, height); newBuffer.ClearBuffer(backColor); int dataWidth = Math.Min(width, _width); int dataHeight = Math.Min(height, _height); int deltaX = Math.Abs(width - _width); int deltaY = Math.Abs(height - _height); int midDeltaX = (int)Math.Round(deltaX / 2f, MidpointRounding.AwayFromZero); int midDeltaY = (int)Math.Round(deltaY / 2f, MidpointRounding.AwayFromZero); bool inflateX = (width > _width); bool inflateY = (height > _height); int srcX = 0; int srcY = 0; int destX = 0; int destY = 0; int srcW = width; int srcH = height; switch (pivot) { case ResizePivot.TopLeft: srcX = 0; destX = 0; srcY = 0; destY = 0; break; case ResizePivot.TopCenter: if (inflateX) { srcX = 0; destX = midDeltaX; } else { srcX = midDeltaX; destX = 0; } srcY = 0; destY = 0; break; case ResizePivot.TopRight: if (inflateX) { srcX = 0; destX = deltaX; } else { srcX = deltaX; destX = 0; } srcY = 0; destY = 0; break; case ResizePivot.MiddleLeft: srcX = 0; destX = 0; if (inflateY) { srcY = 0; destY = midDeltaY; } else { srcY = midDeltaY; destY = 0; } break; case ResizePivot.MiddleCenter: if (inflateX) { srcX = 0; destX = midDeltaX; } else { srcX = midDeltaX; destX = 0; } if (inflateY) { srcY = 0; destY = midDeltaY; } else { srcY = midDeltaY; destY = 0; } break; case ResizePivot.MiddleRight: if (inflateX) { srcX = 0; destX = deltaX; } else { srcX = deltaX; destX = 0; } if (inflateY) { srcY = 0; destY = midDeltaY; } else { srcY = midDeltaY; destY = 0; } break; case ResizePivot.BottomLeft: srcX = 0; destX = 0; if (inflateY) { srcY = 0; destY = deltaY; } else { srcY = deltaY; destY = 0; } break; case ResizePivot.BottomCenter: if (inflateX) { srcX = 0; destX = midDeltaX; } else { srcX = midDeltaX; destX = 0; } if (inflateY) { srcY = 0; destY = deltaY; } else { srcY = deltaY; destY = 0; } break; case ResizePivot.BottomRight: if (inflateX) { srcX = 0; destX = deltaX; } else { srcX = deltaX; destX = 0; } if (inflateY) { srcY = 0; destY = deltaY; } else { srcY = deltaY; destY = 0; } break; } if (inflateX && inflateY) { newBuffer.SetSubBuffer(_buffer, destX, destY, dataWidth, dataHeight); } else { PixelBuffer blitBuffer = this.GetSubBuffer(srcX, srcY, dataWidth, dataHeight); newBuffer.SetSubBuffer(blitBuffer, destX, destY); } this.Initialize(width, height); Array.Copy(newBuffer.InternalBuffer, _buffer, _buffer.Length); newBuffer.Dispose(); }
public void ResizeBuffer(ResizePivot pivot, int width, int height, Color backColor) { if (width == _width && height == _height) return; }