KiCad PCB EDA Suite
Loading...
Searching...
No Matches
BITMAP_BASE Class Reference

This class handle bitmap images in KiCad. More...

#include <bitmap_base.h>

Classes

struct  PREVIEW_SAVE
 Everything a preview image stands in for, kept so it can be put back exactly. More...
 

Public Member Functions

 BITMAP_BASE (const VECTOR2I &pos=VECTOR2I(0, 0))
 
 BITMAP_BASE (const BITMAP_BASE &aSchBitmap)
 
 ~BITMAP_BASE ()
 
double GetPixelSizeIu () const
 
void SetPixelSizeIu (double aPixSize)
 
wxImage * GetImageData ()
 
const wxImage * GetImageData () const
 
const wxImage * GetOriginalImageData () const
 
double GetScale () const
 
void SetScale (double aScale)
 
KIID GetImageID () const
 
void ImportData (BITMAP_BASE &aItem)
 Copy aItem image to this object and update m_bitmap.
 
double GetScalingFactor () const
 This scaling factor depends on m_pixelSizeIu and m_scale.
 
VECTOR2I GetSize () const
 
VECTOR2I GetSizePixels () const
 
int GetPPI () const
 
int GetLegacyPPI () const
 Recompute the PPI the way it was computed before the pixels/cm truncation fix.
 
const BOX2I GetBoundingBox () const
 Return the orthogonal, bounding box of this object for display purposes.
 
void DrawBitmap (wxDC *aDC, const VECTOR2I &aPos, const KIGFX::COLOR4D &aBackgroundColor=KIGFX::COLOR4D::UNSPECIFIED) const
 
bool ReadImageFile (const wxString &aFullFilename)
 Reads and stores in memory an image file.
 
bool ReadImageFile (wxInputStream &aInStream)
 Reads and stores in memory an image file.
 
bool ReadImageFile (wxMemoryBuffer &aBuf)
 Reads and stores in memory an image file.
 
bool SetImage (const wxImage &aImage)
 Set the image from an existing wxImage.
 
void BeginPreviewImage (const wxImage &aImage)
 Show finished pixels in place of the image, without disturbing the scale or the resolution.
 
void EndPreviewImage ()
 Put back the image a preview stood in for, and do nothing if none is showing.
 
bool SaveImageData (wxOutputStream &aOutStream) const
 Write the bitmap data to aOutStream.
 
bool LoadLegacyData (LINE_READER &aLine, wxString &aErrorMsg)
 Load an image data saved by SaveImageData.
 
void Mirror (FLIP_DIRECTION aFlipDirection)
 Mirror image vertically (i.e.
 
void Rotate (bool aRotateCCW)
 Rotate image CW or CCW.
 
void ConvertToGreyscale ()
 
void InvertColors ()
 Invert the colours of the image (e.g.
 
void ConvertColourToAlpha (const wxColour &aColour)
 Convert aColour to transparent in the image, proportionally to the 'distance' of each pixel from aColour.
 
bool IsMirroredX () const
 
bool IsMirroredY () const
 
EDA_ANGLE Rotation () const
 
void PlotImage (PLOTTER *aPlotter, const VECTOR2I &aPos, const KIGFX::COLOR4D &aDefaultColor, int aDefaultPensize) const
 Plot bitmap on plotter.
 
wxBitmapType GetImageType () const
 Return the bitmap type (png, jpeg, etc.)
 
void SetImageType (wxBitmapType aType)
 Set the bitmap type (png, jpeg, etc.)
 

Private Member Functions

void updateImageDataBuffer ()
 Resets the image data buffer using the current image data.
 
void rebuildBitmap (bool aResetID=true)
 Rebuild the internal bitmap used to draw/plot image.
 
void ensureBitmapUpToDate () const
 Ensure the cached wxBitmap is up-to-date with the current wxImage.
 
void updatePPI ()
 

Static Private Member Functions

static void mirrorImageInPlace (wxImage &aImage, FLIP_DIRECTION aFlipDirection)
 Mirror the wxImage pixel data in-place without allocating a new image.
 
static void invertImageInPlace (wxImage &aImage)
 Invert the colour of every pixel of the wxImage in-place without allocating a new image.
 

Private Attributes

double m_scale
 The scaling factor of the bitmap with m_pixelSizeIu, controls the actual draw size.
 
wxMemoryBuffer m_imageData
 Cached encoded image data (PNG/JPEG).
 
wxBitmapType m_imageType
 The image type (png, jpeg, etc.).
 
std::optional< PREVIEW_SAVE > m_previewSave
 Set only while a preview is showing.
 
wxImage * m_image
 The raw, uncompressed image data.
 
wxImage * m_originalImage
 Raw image data, not transformed by rotate/mirror.
 
wxBitmap * m_bitmap
 The bitmap used to draw/plot image.
 
bool m_bitmapDirty
 True when m_bitmap needs rebuilding from m_image.
 
double m_pixelSizeIu
 The scaling factor of the bitmap to convert the bitmap size (in pixels) to internal KiCad units.
 
int m_ppi
 The bitmap definition. The default is 300PPI.
 
KIID m_imageId
 
bool m_isMirroredX
 
bool m_isMirroredY
 
EDA_ANGLE m_rotation
 

Detailed Description

This class handle bitmap images in KiCad.

It is not intended to be used alone, but inside another class so all methods are protected or private. It is used in SCH_BITMAP class, DS_DRAW_ITEM_BITMAP, and possibly others in the future.

Warning
Not all plotters are able to plot a bitmap. Mainly GERBER plotters cannot.

Definition at line 46 of file bitmap_base.h.

Constructor & Destructor Documentation

◆ BITMAP_BASE() [1/2]

BITMAP_BASE::BITMAP_BASE ( const VECTOR2I & pos = VECTOR2I( 0, 0 ))

◆ BITMAP_BASE() [2/2]

BITMAP_BASE::BITMAP_BASE ( const BITMAP_BASE & aSchBitmap)

◆ ~BITMAP_BASE()

BITMAP_BASE::~BITMAP_BASE ( )
inline

Definition at line 53 of file bitmap_base.h.

References m_bitmap, m_image, and m_originalImage.

Member Function Documentation

◆ BeginPreviewImage()

void BITMAP_BASE::BeginPreviewImage ( const wxImage & aImage)

Show finished pixels in place of the image, without disturbing the scale or the resolution.

Used for a temporary view, such as a conversion preview. Any rotation or mirroring already in the image is taken as final. Calling this again replaces the view; EndPreviewImage() puts the real image back.

Definition at line 584 of file bitmap_base.cpp.

References ANGLE_0, m_bitmapDirty, m_image, m_imageId, m_isMirroredX, m_isMirroredY, m_originalImage, m_previewSave, and m_rotation.

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), DRAWING_TOOL::ConvertImageToOutlines(), and SCH_EDIT_TOOL::ConvertImageToOutlines().

◆ ConvertColourToAlpha()

void BITMAP_BASE::ConvertColourToAlpha ( const wxColour & aColour)

Convert aColour to transparent in the image, proportionally to the 'distance' of each pixel from aColour.

Pixels matching aColour exactly become fully transparent. Pixels further away from it keep proportionally more opacity. The alpha channel is added if the image does not have one.

Definition at line 655 of file bitmap_base.cpp.

References ConvertColourToAlphaInPlace(), m_bitmapDirty, m_image, m_imageData, m_imageId, and m_originalImage.

◆ ConvertToGreyscale()

void BITMAP_BASE::ConvertToGreyscale ( )

Definition at line 629 of file bitmap_base.cpp.

References m_bitmapDirty, m_image, m_imageData, m_imageId, and m_originalImage.

◆ DrawBitmap()

◆ EndPreviewImage()

void BITMAP_BASE::EndPreviewImage ( )

Put back the image a preview stood in for, and do nothing if none is showing.

Definition at line 612 of file bitmap_base.cpp.

References m_bitmapDirty, m_image, m_imageId, m_isMirroredX, m_isMirroredY, m_originalImage, m_previewSave, and m_rotation.

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), DRAWING_TOOL::ConvertImageToOutlines(), and SCH_EDIT_TOOL::ConvertImageToOutlines().

◆ ensureBitmapUpToDate()

void BITMAP_BASE::ensureBitmapUpToDate ( ) const
private

Ensure the cached wxBitmap is up-to-date with the current wxImage.

Rebuilds the bitmap if it has been invalidated by a transform operation.

Definition at line 97 of file bitmap_base.cpp.

References m_bitmap, m_bitmapDirty, and m_image.

Referenced by DrawBitmap().

◆ GetBoundingBox()

const BOX2I BITMAP_BASE::GetBoundingBox ( ) const

Return the orthogonal, bounding box of this object for display purposes.

This box should be an enclosing perimeter for visible components of this object, and the units should be in the pcb or schematic coordinate system. It is OK to overestimate the size by a few counts.

Definition at line 310 of file bitmap_base.cpp.

References GetSize(), BOX2< Vec >::Inflate(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by BOOST_AUTO_TEST_CASE().

◆ GetImageData() [1/2]

◆ GetImageData() [2/2]

const wxImage * BITMAP_BASE::GetImageData ( ) const
inline

Definition at line 67 of file bitmap_base.h.

References m_image.

◆ GetImageID()

KIID BITMAP_BASE::GetImageID ( ) const
inline

◆ GetImageType()

wxBitmapType BITMAP_BASE::GetImageType ( ) const
inline

Return the bitmap type (png, jpeg, etc.)

Definition at line 276 of file bitmap_base.h.

References m_imageType.

◆ GetLegacyPPI()

int BITMAP_BASE::GetLegacyPPI ( ) const

Recompute the PPI the way it was computed before the pixels/cm truncation fix.

Used only to migrate the stored image scale of pre-fix designs. Returns the same value as GetPPI() whenever the embedded resolution has no fractional pixels/cm.

Returns
the PPI a pre-fix KiCad would have derived from the embedded image.

Definition at line 132 of file bitmap_base.cpp.

References KiROUND(), m_originalImage, and m_ppi.

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_FIXTURE_TEST_CASE(), checkTransformedBoardUsesOnlyKnownTokens(), checkTransformedSchematicUsesOnlyKnownTokens(), compensateImageScale(), and compensateReferenceImageScales().

◆ GetOriginalImageData()

const wxImage * BITMAP_BASE::GetOriginalImageData ( ) const
inline

◆ GetPixelSizeIu()

double BITMAP_BASE::GetPixelSizeIu ( ) const
inline

Definition at line 63 of file bitmap_base.h.

References m_pixelSizeIu.

Referenced by BOOST_AUTO_TEST_CASE(), and BOOST_AUTO_TEST_CASE().

◆ GetPPI()

◆ GetScale()

double BITMAP_BASE::GetScale ( ) const
inline

◆ GetScalingFactor()

double BITMAP_BASE::GetScalingFactor ( ) const
inline

This scaling factor depends on m_pixelSizeIu and m_scale.

m_pixelSizeIu gives the scaling factor between a pixel size and the internal units. m_scale is an user dependent value, and gives the "zoom" value.

  • m_scale = 1.0 = original size of bitmap.
  • m_scale < 1.0 = the bitmap is drawn smaller than its original size.
  • m_scale > 1.0 = the bitmap is drawn bigger than its original size.
Returns
The scaling factor from pixel size to actual draw size.

Definition at line 92 of file bitmap_base.h.

References m_pixelSizeIu, and m_scale.

Referenced by DrawBitmap(), GetSize(), and PlotImage().

◆ GetSize()

VECTOR2I BITMAP_BASE::GetSize ( ) const
Returns
the actual size (in user units, not in pixels) of the image

Definition at line 441 of file bitmap_base.cpp.

References GetScalingFactor(), KiROUND(), m_image, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by BOOST_AUTO_TEST_CASE(), DrawBitmap(), GetBoundingBox(), DS_DRAW_ITEM_BITMAP::GetBoundingBox(), REFERENCE_IMAGE::operator==(), and REFERENCE_IMAGE::Similarity().

◆ GetSizePixels()

VECTOR2I BITMAP_BASE::GetSizePixels ( ) const
inline

◆ ImportData()

void BITMAP_BASE::ImportData ( BITMAP_BASE & aItem)

◆ InvertColors()

void BITMAP_BASE::InvertColors ( )

Invert the colours of the image (e.g.

white becomes black).

The alpha channel is not modified.

Definition at line 642 of file bitmap_base.cpp.

References invertImageInPlace(), m_bitmapDirty, m_image, m_imageData, m_imageId, and m_originalImage.

◆ invertImageInPlace()

void BITMAP_BASE::invertImageInPlace ( wxImage & aImage)
staticprivate

Invert the colour of every pixel of the wxImage in-place without allocating a new image.

The alpha channel is not modified.

Definition at line 526 of file bitmap_base.cpp.

Referenced by InvertColors().

◆ IsMirroredX()

bool BITMAP_BASE::IsMirroredX ( ) const
inline

Definition at line 256 of file bitmap_base.h.

References m_isMirroredX.

Referenced by KIGFX::GAL_MODERN::DrawBitmap(), and KIGFX::OPENGL_GAL::DrawBitmap().

◆ IsMirroredY()

bool BITMAP_BASE::IsMirroredY ( ) const
inline

Definition at line 257 of file bitmap_base.h.

References m_isMirroredY.

Referenced by KIGFX::GAL_MODERN::DrawBitmap(), and KIGFX::OPENGL_GAL::DrawBitmap().

◆ LoadLegacyData()

bool BITMAP_BASE::LoadLegacyData ( LINE_READER & aLine,
wxString & aErrorMsg )

Load an image data saved by SaveImageData.

The file format must be png format in hexadecimal.

Parameters
aLinethe LINE_READER used to read the data file.
aErrorMsgDescription of the error if an error occurs while loading the png bitmap data.
Returns
true if the bitmap loaded successfully.

Definition at line 262 of file bitmap_base.cpp.

References LINE_READER::Line(), m_bitmap, m_image, m_originalImage, LINE_READER::ReadLine(), and updateImageDataBuffer().

Referenced by DRAWING_SHEET_PARSER::readPngdata().

◆ Mirror()

void BITMAP_BASE::Mirror ( FLIP_DIRECTION aFlipDirection)

Mirror image vertically (i.e.

relative to its horizontal X axis ) or horizontally (i.e relative to its vertical Y axis).

Parameters
aFlipDirectionthe direction to flip the image.

Definition at line 543 of file bitmap_base.cpp.

References m_bitmapDirty, m_image, m_imageData, m_isMirroredX, m_isMirroredY, mirrorImageInPlace(), and TOP_BOTTOM.

Referenced by PCB_IO_EASYEDAPRO_PARSER::ParseBoard(), PCB_IO_EASYEDAPRO_V3_PARSER::ParseBoard(), and PCB_IO_EASYEDAPRO_V3_PARSER::ParseFootprint().

◆ mirrorImageInPlace()

void BITMAP_BASE::mirrorImageInPlace ( wxImage & aImage,
FLIP_DIRECTION aFlipDirection )
staticprivate

Mirror the wxImage pixel data in-place without allocating a new image.

Definition at line 455 of file bitmap_base.cpp.

References LEFT_RIGHT.

Referenced by Mirror().

◆ PlotImage()

void BITMAP_BASE::PlotImage ( PLOTTER * aPlotter,
const VECTOR2I & aPos,
const KIGFX::COLOR4D & aDefaultColor,
int aDefaultPensize ) const

Plot bitmap on plotter.

If the plotter does not support bitmaps, plot a

Parameters
aPlotterthe plotter to use.
aPosthe position of the center of the bitmap.
aDefaultColorthe color used to plot the rectangle when bitmap is not supported.
aDefaultPensizethe pen size used to plot the rectangle when bitmap is not supported.

Definition at line 668 of file bitmap_base.cpp.

References GetScalingFactor(), m_image, PLOTTER::PlotImage(), PLOTTER::SetColor(), and PLOTTER::SetCurrentLineWidth().

Referenced by PlotDrawingSheet().

◆ ReadImageFile() [1/3]

bool BITMAP_BASE::ReadImageFile ( const wxString & aFullFilename)

Reads and stores in memory an image file.

Initialize the bitmap format used to draw this item. Supported images formats are format supported by wxImage if all handlers are loaded. By default, .png, .jpeg are always loaded.

Parameters
aFullFilenameThe full filename of the image file to read.
Returns
true if success reading else false.

Definition at line 207 of file bitmap_base.cpp.

References ReadImageFile().

Referenced by BOOST_AUTO_TEST_CASE(), loadAsJpeg(), DRAWING_SHEET_PARSER::parseBitmap(), and ReadImageFile().

◆ ReadImageFile() [2/3]

bool BITMAP_BASE::ReadImageFile ( wxInputStream & aInStream)

Reads and stores in memory an image file.

Initialize the bitmap format used to draw this item.

Supported images formats are format supported by wxImage if all handlers are loaded. By default, .png, .jpeg are always loaded.

Parameters
aInStreaman input stream containing the file data.
Returns
true if success reading else false.

Definition at line 171 of file bitmap_base.cpp.

References m_imageData, and SetImage().

◆ ReadImageFile() [3/3]

bool BITMAP_BASE::ReadImageFile ( wxMemoryBuffer & aBuf)

Reads and stores in memory an image file.

Initialize the bitmap format used to draw this item.

Supported images formats are format supported by wxImage if all handlers are loaded. By default, .png, .jpeg are always loaded.

Parameters
aBufa memory buffer containing the file data.
Returns
true if success reading else false.

Definition at line 190 of file bitmap_base.cpp.

References m_imageData, and SetImage().

◆ rebuildBitmap()

void BITMAP_BASE::rebuildBitmap ( bool aResetID = true)
private

Rebuild the internal bitmap used to draw/plot image.

This must be called after a m_image change.

Parameters
aResetIDis used to reset the cache ID used for OpenGL rendering.

Definition at line 83 of file bitmap_base.cpp.

References m_bitmap, m_bitmapDirty, m_image, and m_imageId.

Referenced by ImportData(), and SetImage().

◆ Rotate()

void BITMAP_BASE::Rotate ( bool aRotateCCW)

Rotate image CW or CCW.

Parameters
aRotateCCWtrue to rotate CCW or false to rotate CW.

Definition at line 560 of file bitmap_base.cpp.

References ANGLE_90, m_bitmapDirty, m_image, m_imageData, and m_rotation.

Referenced by BOOST_AUTO_TEST_CASE().

◆ Rotation()

EDA_ANGLE BITMAP_BASE::Rotation ( ) const
inline

◆ SaveImageData()

bool BITMAP_BASE::SaveImageData ( wxOutputStream & aOutStream) const

Write the bitmap data to aOutStream.

This writes binary data, not hexadecimal strings

Parameters
aOutStreamThe output stream to write to.
Returns
true if success writing else false.

Definition at line 238 of file bitmap_base.cpp.

References m_image, m_imageData, and m_imageType.

Referenced by BOOST_AUTO_TEST_CASE(), compareImages(), DS_DATA_MODEL_IO::format(), PCB_IO_KICAD_SEXPR::format(), PCB_WRITER_V10::format(), PCB_WRITER_V9::format(), SCH_IO_KICAD_SEXPR::saveBitmap(), SCH_WRITER_V10::saveBitmap(), SCH_WRITER_V9::saveBitmap(), and storedImageData().

◆ SetImage()

bool BITMAP_BASE::SetImage ( const wxImage & aImage)

Set the image from an existing wxImage.

Definition at line 219 of file bitmap_base.cpp.

References m_image, m_originalImage, rebuildBitmap(), and updatePPI().

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), ReadImageFile(), and ReadImageFile().

◆ SetImageType()

void BITMAP_BASE::SetImageType ( wxBitmapType aType)
inline

Set the bitmap type (png, jpeg, etc.)

Definition at line 281 of file bitmap_base.h.

References m_imageType.

Referenced by TARGET3001_SCH_BUILDER::makePicture().

◆ SetPixelSizeIu()

void BITMAP_BASE::SetPixelSizeIu ( double aPixSize)
inline

Definition at line 64 of file bitmap_base.h.

References m_pixelSizeIu.

Referenced by PLEDITOR_PRINTOUT::PrintPage().

◆ SetScale()

void BITMAP_BASE::SetScale ( double aScale)
inline

Definition at line 72 of file bitmap_base.h.

References m_scale.

Referenced by DRAWING_SHEET_PARSER::parseBitmap().

◆ updateImageDataBuffer()

void BITMAP_BASE::updateImageDataBuffer ( )
private

Resets the image data buffer using the current image data.

Definition at line 683 of file bitmap_base.cpp.

References m_image, m_imageData, and m_imageType.

Referenced by LoadLegacyData().

◆ updatePPI()

void BITMAP_BASE::updatePPI ( )
private

Definition at line 110 of file bitmap_base.cpp.

References KiROUND(), m_originalImage, and m_ppi.

Referenced by SetImage().

Member Data Documentation

◆ m_bitmap

wxBitmap* BITMAP_BASE::m_bitmap
mutableprivate

The bitmap used to draw/plot image.

Definition at line 338 of file bitmap_base.h.

Referenced by BITMAP_BASE(), BITMAP_BASE(), DrawBitmap(), ensureBitmapUpToDate(), LoadLegacyData(), rebuildBitmap(), and ~BITMAP_BASE().

◆ m_bitmapDirty

bool BITMAP_BASE::m_bitmapDirty
mutableprivate

◆ m_image

◆ m_imageData

wxMemoryBuffer BITMAP_BASE::m_imageData
mutableprivate

◆ m_imageId

◆ m_imageType

wxBitmapType BITMAP_BASE::m_imageType
private

The image type (png, jpeg, etc.).

Definition at line 321 of file bitmap_base.h.

Referenced by BITMAP_BASE(), BITMAP_BASE(), GetImageType(), ImportData(), SaveImageData(), SetImageType(), and updateImageDataBuffer().

◆ m_isMirroredX

bool BITMAP_BASE::m_isMirroredX
private

◆ m_isMirroredY

bool BITMAP_BASE::m_isMirroredY
private

◆ m_originalImage

wxImage* BITMAP_BASE::m_originalImage
private

◆ m_pixelSizeIu

double BITMAP_BASE::m_pixelSizeIu
private

The scaling factor of the bitmap to convert the bitmap size (in pixels) to internal KiCad units.

This usually does not change.

Definition at line 340 of file bitmap_base.h.

Referenced by BITMAP_BASE(), BITMAP_BASE(), GetPixelSizeIu(), GetScalingFactor(), ImportData(), and SetPixelSizeIu().

◆ m_ppi

int BITMAP_BASE::m_ppi
private

The bitmap definition. The default is 300PPI.

Definition at line 343 of file bitmap_base.h.

Referenced by BITMAP_BASE(), BITMAP_BASE(), GetLegacyPPI(), GetPPI(), ImportData(), and updatePPI().

◆ m_previewSave

std::optional<PREVIEW_SAVE> BITMAP_BASE::m_previewSave
private

Set only while a preview is showing.

Definition at line 334 of file bitmap_base.h.

Referenced by BeginPreviewImage(), and EndPreviewImage().

◆ m_rotation

EDA_ANGLE BITMAP_BASE::m_rotation
private

◆ m_scale

double BITMAP_BASE::m_scale
private

The scaling factor of the bitmap with m_pixelSizeIu, controls the actual draw size.

Definition at line 318 of file bitmap_base.h.

Referenced by BITMAP_BASE(), BITMAP_BASE(), GetScale(), GetScalingFactor(), ImportData(), and SetScale().


The documentation for this class was generated from the following files: