Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
65a585b5
Commit
65a585b5
authored
Jun 15, 2010
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Plain Diff
bitmap2component: better user interface (using wxWidgets) and more bitmaps file format import
parents
6e859e26
5ecb22b5
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
2425 additions
and
63 deletions
+2425
-63
CMakeLists.txt
bitmap2component/CMakeLists.txt
+6
-1
bitmap2cmp_gui.cpp
bitmap2component/bitmap2cmp_gui.cpp
+344
-0
bitmap2cmp_gui_base.cpp
bitmap2component/bitmap2cmp_gui_base.cpp
+120
-0
bitmap2cmp_gui_base.fbp
bitmap2component/bitmap2cmp_gui_base.fbp
+738
-0
bitmap2cmp_gui_base.h
bitmap2component/bitmap2cmp_gui_base.h
+69
-0
bitmap2component.cpp
bitmap2component/bitmap2component.cpp
+26
-62
gui_bm2cmp.cpp
bitmap2component/gui_bm2cmp.cpp
+1122
-0
No files found.
bitmap2component/CMakeLists.txt
View file @
65a585b5
...
...
@@ -5,12 +5,17 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}
set
(
BITMAP2COMPONENT_SRCS
bitmap2component.cpp
bitmap2cmp_gui_base
bitmap2cmp_gui
)
add_executable
(
bitmap2component WIN32 MACOSX_BUNDLE
${
BITMAP2COMPONENT_SRCS
}
${
BITMAP2COMPONENT_RESOURCES
}
)
target_link_libraries
(
bitmap2component potrace kbool
)
target_link_libraries
(
bitmap2component
${
wxWidgets_LIBRARIES
}
potrace
kbool
)
install
(
TARGETS bitmap2component
DESTINATION
${
KICAD_PLUGINS
}
...
...
bitmap2component/bitmap2cmp_gui.cpp
0 → 100644
View file @
65a585b5
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2010 jean-pierre.charras
* Copyright (C) 1992-2010 Kicad Developers, see change_log.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "wx/wx.h"
#include "wx/config.h"
#include "bitmap2cmp_gui_base.h"
#include "potracelib.h"
#include "bitmap_io.h"
#define KEYWORD_FRAME_POSX wxT( "bmconverter_Pos_x" )
#define KEYWORD_FRAME_POSY wxT( "bmconverter_Pos_y" )
#define KEYWORD_FRAME_SIZEX wxT( "bmconverter_Size_x" )
#define KEYWORD_FRAME_SIZEY wxT( "bmconverter_Size_y" )
extern
int
bitmap2component
(
potrace_bitmap_t
*
aPotrace_bitmap
,
FILE
*
aOutfile
,
int
aFormat
);
/* Class BM2CMP_FRAME_BASE
This is the main frame for this application
*/
class
BM2CMP_FRAME
:
public
BM2CMP_FRAME_BASE
{
private
:
wxImage
m_Pict_Image
;
wxBitmap
m_Pict_Bitmap
;
wxImage
m_Greyscale_Image
;
wxBitmap
m_Greyscale_Bitmap
;
wxImage
m_NB_Image
;
wxBitmap
m_BN_Bitmap
;
wxString
m_ImgFileName
;
wxSize
m_FrameSize
;
wxPoint
m_FramePos
;
wxConfig
*
m_Config
;
public
:
BM2CMP_FRAME
();
~
BM2CMP_FRAME
();
private
:
// Event handlers
void
OnPaint
(
wxPaintEvent
&
event
);
void
OnLoadFile
(
wxCommandEvent
&
event
);
void
OnExportEeschema
(
wxCommandEvent
&
event
);
void
OnExportPcbnew
(
wxCommandEvent
&
event
);
void
Binarize
(
int
aThreshold
);
void
OnOptionsSelection
(
wxCommandEvent
&
event
);
void
OnThresholdChange
(
wxScrollEvent
&
event
);
void
NegateGreyscaleImage
(
);
void
ExportFile
(
FILE
*
aOutfile
,
int
aFormat
);
};
BM2CMP_FRAME
::
BM2CMP_FRAME
()
:
BM2CMP_FRAME_BASE
(
NULL
)
{
m_Config
=
new
wxConfig
();
m_Config
->
Read
(
KEYWORD_FRAME_POSX
,
&
m_FramePos
.
x
,
-
1
);
m_Config
->
Read
(
KEYWORD_FRAME_POSY
,
&
m_FramePos
.
y
,
-
1
);
m_Config
->
Read
(
KEYWORD_FRAME_SIZEX
,
&
m_FrameSize
.
x
,
-
1
);
m_Config
->
Read
(
KEYWORD_FRAME_SIZEY
,
&
m_FrameSize
.
y
,
-
1
);
wxString
msg
(
wxT
(
" 0000 "
)
);
m_gridInfo
->
SetCellValue
(
1
,
0
,
msg
);
m_gridInfo
->
SetCellValue
(
2
,
0
,
msg
);
if
(
GetSizer
()
)
{
GetSizer
()
->
SetSizeHints
(
this
);
}
SetSize
(
m_FramePos
.
x
,
m_FramePos
.
y
,
m_FrameSize
.
x
,
m_FrameSize
.
y
);
if
(
m_FramePos
==
wxDefaultPosition
)
Centre
();
}
BM2CMP_FRAME
::~
BM2CMP_FRAME
()
{
if
(
(
m_Config
==
NULL
)
||
IsIconized
()
)
return
;
m_FrameSize
=
GetSize
();
m_FramePos
=
GetPosition
();
m_Config
->
Write
(
KEYWORD_FRAME_POSX
,
(
long
)
m_FramePos
.
x
);
m_Config
->
Write
(
KEYWORD_FRAME_POSY
,
(
long
)
m_FramePos
.
y
);
m_Config
->
Write
(
KEYWORD_FRAME_SIZEX
,
(
long
)
m_FrameSize
.
x
);
m_Config
->
Write
(
KEYWORD_FRAME_SIZEY
,
(
long
)
m_FrameSize
.
y
);
delete
m_Config
;
/* This needed for OSX: avoids furter OnDraw processing after this
* destructor and before the native window is destroyed
*/
this
->
Freeze
(
);
}
void
BM2CMP_FRAME
::
OnPaint
(
wxPaintEvent
&
event
)
{
wxPaintDC
pict_dc
(
m_InitialPicturePanel
);
wxPaintDC
greyscale_dc
(
m_GreyscalePicturePanel
);
wxPaintDC
nb_dc
(
m_BNPicturePanel
);
m_InitialPicturePanel
->
PrepareDC
(
pict_dc
);
m_GreyscalePicturePanel
->
PrepareDC
(
greyscale_dc
);
m_BNPicturePanel
->
PrepareDC
(
nb_dc
);
pict_dc
.
DrawBitmap
(
m_Pict_Bitmap
,
0
,
0
,
false
);
greyscale_dc
.
DrawBitmap
(
m_Greyscale_Bitmap
,
0
,
0
,
false
);
nb_dc
.
DrawBitmap
(
m_BN_Bitmap
,
0
,
0
,
false
);
}
/* Called to load a bitmap file
*/
void
BM2CMP_FRAME
::
OnLoadFile
(
wxCommandEvent
&
event
)
{
wxFileDialog
FileDlg
(
this
,
_
(
"Choose Image"
),
::
wxGetCwd
(),
wxEmptyString
,
_
(
"Image Files "
)
+
wxImage
::
GetImageExtWildcard
(),
wxFD_OPEN
);
int
diag
=
FileDlg
.
ShowModal
();
if
(
diag
!=
wxID_OK
)
return
;
m_ImgFileName
=
FileDlg
.
GetPath
();
if
(
!
m_Pict_Image
.
LoadFile
(
m_ImgFileName
)
)
{
wxMessageBox
(
_
(
"Couldn't load image from '%s'."
),
m_ImgFileName
.
c_str
()
);
return
;
}
m_Pict_Bitmap
=
wxBitmap
(
m_Pict_Image
);
int
h
=
m_Pict_Bitmap
.
GetHeight
();
int
w
=
m_Pict_Bitmap
.
GetWidth
();
int
nb
=
m_Pict_Bitmap
.
GetDepth
();
wxString
msg
;
msg
.
Printf
(
wxT
(
"%d"
),
h
);
m_gridInfo
->
SetCellValue
(
0
,
0
,
msg
);
msg
.
Printf
(
wxT
(
"%d"
),
w
);
m_gridInfo
->
SetCellValue
(
1
,
0
,
msg
);
msg
.
Printf
(
wxT
(
"%d"
),
nb
);
m_gridInfo
->
SetCellValue
(
2
,
0
,
msg
);
m_InitialPicturePanel
->
SetVirtualSize
(
w
,
h
);
m_GreyscalePicturePanel
->
SetVirtualSize
(
w
,
h
);
m_BNPicturePanel
->
SetVirtualSize
(
w
,
h
);
m_Greyscale_Image
.
Destroy
();
m_Greyscale_Image
=
m_Pict_Image
.
ConvertToGreyscale
(
);
if
(
m_rbOptions
->
GetSelection
()
>
0
)
NegateGreyscaleImage
(
);
m_Greyscale_Bitmap
=
wxBitmap
(
m_Greyscale_Image
);
m_NB_Image
=
m_Greyscale_Image
;
Binarize
(
m_sliderThreshold
->
GetValue
()
);
Refresh
();
}
void
BM2CMP_FRAME
::
Binarize
(
int
aThreshold
)
{
unsigned
int
pixin
;
unsigned
char
pixout
;
int
h
=
m_Greyscale_Image
.
GetHeight
();
int
w
=
m_Greyscale_Image
.
GetWidth
();
unsigned
int
threshold
=
(
aThreshold
*
256
)
/
10
;
for
(
int
y
=
1
;
y
<
h
;
y
++
)
for
(
int
x
=
1
;
x
<
w
;
x
++
)
{
pixin
=
m_Greyscale_Image
.
GetGreen
(
x
,
y
);
if
(
pixin
<
threshold
)
pixout
=
0
;
else
pixout
=
255
;
m_NB_Image
.
SetRGB
(
x
,
y
,
pixout
,
pixout
,
pixout
);
}
m_BN_Bitmap
=
wxBitmap
(
m_NB_Image
);
}
void
BM2CMP_FRAME
::
NegateGreyscaleImage
(
)
{
unsigned
char
pix
;
int
h
=
m_Greyscale_Image
.
GetHeight
();
int
w
=
m_Greyscale_Image
.
GetWidth
();
for
(
int
y
=
1
;
y
<
h
;
y
++
)
for
(
int
x
=
1
;
x
<
w
;
x
++
)
{
pix
=
m_Greyscale_Image
.
GetGreen
(
x
,
y
);
pix
=
~
pix
;
m_Greyscale_Image
.
SetRGB
(
x
,
y
,
pix
,
pix
,
pix
);
}
}
/* Called on Normal/Negative change option */
void
BM2CMP_FRAME
::
OnOptionsSelection
(
wxCommandEvent
&
event
)
{
NegateGreyscaleImage
(
);
m_Greyscale_Bitmap
=
wxBitmap
(
m_Greyscale_Image
);
Binarize
(
m_sliderThreshold
->
GetValue
()
);
Refresh
();
}
void
BM2CMP_FRAME
::
OnThresholdChange
(
wxScrollEvent
&
event
)
{
Binarize
(
m_sliderThreshold
->
GetValue
()
);
Refresh
();
}
void
BM2CMP_FRAME
::
OnExportEeschema
(
wxCommandEvent
&
event
)
{
wxString
msg
=
_
(
"Schematic lib file (*.lib)|*.lib"
);
wxFileDialog
FileDlg
(
this
,
_
(
"Create lib file"
),
::
wxGetCwd
(),
wxEmptyString
,
msg
,
wxFD_SAVE
|
wxFD_OVERWRITE_PROMPT
);
int
diag
=
FileDlg
.
ShowModal
();
if
(
diag
!=
wxID_OK
)
return
;
wxString
filename
=
FileDlg
.
GetPath
();
FILE
*
outfile
;
outfile
=
wxFopen
(
filename
,
wxT
(
"w"
)
);
if
(
outfile
==
NULL
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"File %s could not be created"
),
filename
.
c_str
()
);
wxMessageBox
(
msg
);
return
;
}
ExportFile
(
outfile
,
1
);
fclose
(
outfile
);
}
void
BM2CMP_FRAME
::
OnExportPcbnew
(
wxCommandEvent
&
event
)
{
wxString
msg
=
_
(
"Footprint export file (*.emp)|*.emp"
);
wxFileDialog
FileDlg
(
this
,
_
(
"Create footprint export file"
),
::
wxGetCwd
(),
wxEmptyString
,
msg
,
wxFD_SAVE
|
wxFD_OVERWRITE_PROMPT
);
int
diag
=
FileDlg
.
ShowModal
();
if
(
diag
!=
wxID_OK
)
return
;
wxString
filename
=
FileDlg
.
GetPath
();
FILE
*
outfile
;
outfile
=
wxFopen
(
filename
,
wxT
(
"w"
)
);
if
(
outfile
==
NULL
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"File %s could not be created"
),
filename
.
c_str
()
);
wxMessageBox
(
msg
);
return
;
}
ExportFile
(
outfile
,
0
);
fclose
(
outfile
);
}
void
BM2CMP_FRAME
::
ExportFile
(
FILE
*
aOutfile
,
int
aFormat
)
{
// Create a potrace bitmap
int
h
=
m_NB_Image
.
GetHeight
();
int
w
=
m_NB_Image
.
GetWidth
();
potrace_bitmap_t
*
potrace_bitmap
=
bm_new
(
w
,
h
);
if
(
!
potrace_bitmap
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"Error allocating bitmap: %s"
),
strerror
(
errno
)
);
wxMessageBox
(
msg
);
return
;
}
/* fill the bitmap with data */
for
(
int
y
=
0
;
y
<
h
;
y
++
)
{
for
(
int
x
=
0
;
x
<
w
;
x
++
)
{
unsigned
char
pix
=
m_NB_Image
.
GetGreen
(
x
,
y
);
BM_PUT
(
potrace_bitmap
,
x
,
y
,
pix
?
1
:
0
);
}
}
bitmap2component
(
potrace_bitmap
,
aOutfile
,
aFormat
);
}
// BM_TO_CMP_APP
class
BM_TO_CMP_APP
:
public
wxApp
{
public
:
virtual
bool
OnInit
();
};
IMPLEMENT_APP
(
BM_TO_CMP_APP
)
///-----------------------------------------------------------------------------
// BM_TO_CMP_APP
// main program
//-----------------------------------------------------------------------------
bool
BM_TO_CMP_APP
::
OnInit
()
{
wxInitAllImageHandlers
();
SetVendorName
(
wxT
(
"kicad"
)
);
wxFrame
*
frame
=
new
BM2CMP_FRAME
();
frame
->
Show
(
true
);
return
true
;
}
bitmap2component/bitmap2cmp_gui_base.cpp
0 → 100644
View file @
65a585b5
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "bitmap2cmp_gui_base.h"
///////////////////////////////////////////////////////////////////////////
BM2CMP_FRAME_BASE
::
BM2CMP_FRAME_BASE
(
wxWindow
*
parent
,
wxWindowID
id
,
const
wxString
&
title
,
const
wxPoint
&
pos
,
const
wxSize
&
size
,
long
style
)
:
wxFrame
(
parent
,
id
,
title
,
pos
,
size
,
style
)
{
this
->
SetSizeHints
(
wxDefaultSize
,
wxDefaultSize
);
wxBoxSizer
*
bMainSizer
;
bMainSizer
=
new
wxBoxSizer
(
wxHORIZONTAL
);
m_notebook1
=
new
wxNotebook
(
this
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
m_InitialPicturePanel
=
new
wxScrolledWindow
(
m_notebook1
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
wxHSCROLL
|
wxVSCROLL
);
m_InitialPicturePanel
->
SetScrollRate
(
5
,
5
);
m_InitialPicturePanel
->
SetMinSize
(
wxSize
(
400
,
300
)
);
m_notebook1
->
AddPage
(
m_InitialPicturePanel
,
_
(
"Original Picture"
),
true
);
m_GreyscalePicturePanel
=
new
wxScrolledWindow
(
m_notebook1
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
wxHSCROLL
|
wxVSCROLL
);
m_GreyscalePicturePanel
->
SetScrollRate
(
5
,
5
);
m_GreyscalePicturePanel
->
SetMinSize
(
wxSize
(
400
,
300
)
);
m_notebook1
->
AddPage
(
m_GreyscalePicturePanel
,
_
(
"Greyscale Picture"
),
false
);
m_BNPicturePanel
=
new
wxScrolledWindow
(
m_notebook1
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
wxHSCROLL
|
wxVSCROLL
);
m_BNPicturePanel
->
SetScrollRate
(
5
,
5
);
m_notebook1
->
AddPage
(
m_BNPicturePanel
,
_
(
"Binary Picture"
),
false
);
bMainSizer
->
Add
(
m_notebook1
,
1
,
wxEXPAND
,
5
);
wxBoxSizer
*
brightSizer
;
brightSizer
=
new
wxBoxSizer
(
wxVERTICAL
);
m_gridInfo
=
new
wxGrid
(
this
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
0
);
// Grid
m_gridInfo
->
CreateGrid
(
3
,
1
);
m_gridInfo
->
EnableEditing
(
false
);
m_gridInfo
->
EnableGridLines
(
true
);
m_gridInfo
->
EnableDragGridSize
(
false
);
m_gridInfo
->
SetMargins
(
0
,
0
);
// Columns
m_gridInfo
->
SetColSize
(
0
,
80
);
m_gridInfo
->
EnableDragColMove
(
false
);
m_gridInfo
->
EnableDragColSize
(
true
);
m_gridInfo
->
SetColLabelSize
(
30
);
m_gridInfo
->
SetColLabelValue
(
0
,
_
(
"Value"
)
);
m_gridInfo
->
SetColLabelAlignment
(
wxALIGN_CENTRE
,
wxALIGN_CENTRE
);
// Rows
m_gridInfo
->
AutoSizeRows
();
m_gridInfo
->
EnableDragRowSize
(
true
);
m_gridInfo
->
SetRowLabelSize
(
80
);
m_gridInfo
->
SetRowLabelValue
(
0
,
_
(
"Size X"
)
);
m_gridInfo
->
SetRowLabelValue
(
1
,
_
(
"Size Y"
)
);
m_gridInfo
->
SetRowLabelValue
(
2
,
_
(
"BPP"
)
);
m_gridInfo
->
SetRowLabelAlignment
(
wxALIGN_RIGHT
,
wxALIGN_CENTRE
);
// Label Appearance
// Cell Defaults
m_gridInfo
->
SetDefaultCellAlignment
(
wxALIGN_LEFT
,
wxALIGN_TOP
);
brightSizer
->
Add
(
m_gridInfo
,
0
,
wxEXPAND
|
wxALIGN_CENTER_HORIZONTAL
,
5
);
m_buttonLoad
=
new
wxButton
(
this
,
wxID_ANY
,
_
(
"Load Bitmap"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
brightSizer
->
Add
(
m_buttonLoad
,
0
,
wxALL
|
wxEXPAND
|
wxALIGN_CENTER_HORIZONTAL
,
5
);
m_buttonExportEeschema
=
new
wxButton
(
this
,
wxID_ANY
,
_
(
"Export to eeschema"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
brightSizer
->
Add
(
m_buttonExportEeschema
,
0
,
wxALL
|
wxEXPAND
|
wxALIGN_CENTER_HORIZONTAL
,
5
);
m_buttonExportPcbnew
=
new
wxButton
(
this
,
wxID_ANY
,
_
(
"Export to Pcbnew"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
brightSizer
->
Add
(
m_buttonExportPcbnew
,
0
,
wxALL
|
wxEXPAND
|
wxALIGN_CENTER_HORIZONTAL
,
5
);
wxString
m_rbOptionsChoices
[]
=
{
_
(
"Normal"
),
_
(
"Negative"
)
};
int
m_rbOptionsNChoices
=
sizeof
(
m_rbOptionsChoices
)
/
sizeof
(
wxString
);
m_rbOptions
=
new
wxRadioBox
(
this
,
wxID_ANY
,
_
(
"Options"
),
wxDefaultPosition
,
wxDefaultSize
,
m_rbOptionsNChoices
,
m_rbOptionsChoices
,
1
,
wxRA_SPECIFY_COLS
);
m_rbOptions
->
SetSelection
(
0
);
brightSizer
->
Add
(
m_rbOptions
,
0
,
wxALL
|
wxEXPAND
,
5
);
m_ThresholdText
=
new
wxStaticText
(
this
,
wxID_ANY
,
_
(
"Threshold Value:"
),
wxDefaultPosition
,
wxDefaultSize
,
0
);
m_ThresholdText
->
Wrap
(
-
1
);
brightSizer
->
Add
(
m_ThresholdText
,
0
,
wxTOP
|
wxRIGHT
|
wxLEFT
,
5
);
m_sliderThreshold
=
new
wxSlider
(
this
,
wxID_ANY
,
5
,
0
,
10
,
wxDefaultPosition
,
wxDefaultSize
,
wxSL_AUTOTICKS
|
wxSL_HORIZONTAL
|
wxSL_LABELS
|
wxSL_TOP
);
brightSizer
->
Add
(
m_sliderThreshold
,
0
,
wxEXPAND
|
wxALIGN_CENTER_HORIZONTAL
|
wxBOTTOM
|
wxRIGHT
|
wxLEFT
,
5
);
bMainSizer
->
Add
(
brightSizer
,
0
,
wxEXPAND
,
5
);
this
->
SetSizer
(
bMainSizer
);
this
->
Layout
();
// Connect Events
m_InitialPicturePanel
->
Connect
(
wxEVT_PAINT
,
wxPaintEventHandler
(
BM2CMP_FRAME_BASE
::
OnPaint
),
NULL
,
this
);
m_GreyscalePicturePanel
->
Connect
(
wxEVT_PAINT
,
wxPaintEventHandler
(
BM2CMP_FRAME_BASE
::
OnPaint
),
NULL
,
this
);
m_BNPicturePanel
->
Connect
(
wxEVT_PAINT
,
wxPaintEventHandler
(
BM2CMP_FRAME_BASE
::
OnPaint
),
NULL
,
this
);
m_buttonLoad
->
Connect
(
wxEVT_COMMAND_BUTTON_CLICKED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnLoadFile
),
NULL
,
this
);
m_buttonExportEeschema
->
Connect
(
wxEVT_COMMAND_BUTTON_CLICKED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnExportEeschema
),
NULL
,
this
);
m_buttonExportPcbnew
->
Connect
(
wxEVT_COMMAND_BUTTON_CLICKED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnExportPcbnew
),
NULL
,
this
);
m_rbOptions
->
Connect
(
wxEVT_COMMAND_RADIOBOX_SELECTED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnOptionsSelection
),
NULL
,
this
);
m_sliderThreshold
->
Connect
(
wxEVT_SCROLL_THUMBTRACK
,
wxScrollEventHandler
(
BM2CMP_FRAME_BASE
::
OnThresholdChange
),
NULL
,
this
);
}
BM2CMP_FRAME_BASE
::~
BM2CMP_FRAME_BASE
()
{
// Disconnect Events
m_InitialPicturePanel
->
Disconnect
(
wxEVT_PAINT
,
wxPaintEventHandler
(
BM2CMP_FRAME_BASE
::
OnPaint
),
NULL
,
this
);
m_GreyscalePicturePanel
->
Disconnect
(
wxEVT_PAINT
,
wxPaintEventHandler
(
BM2CMP_FRAME_BASE
::
OnPaint
),
NULL
,
this
);
m_BNPicturePanel
->
Disconnect
(
wxEVT_PAINT
,
wxPaintEventHandler
(
BM2CMP_FRAME_BASE
::
OnPaint
),
NULL
,
this
);
m_buttonLoad
->
Disconnect
(
wxEVT_COMMAND_BUTTON_CLICKED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnLoadFile
),
NULL
,
this
);
m_buttonExportEeschema
->
Disconnect
(
wxEVT_COMMAND_BUTTON_CLICKED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnExportEeschema
),
NULL
,
this
);
m_buttonExportPcbnew
->
Disconnect
(
wxEVT_COMMAND_BUTTON_CLICKED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnExportPcbnew
),
NULL
,
this
);
m_rbOptions
->
Disconnect
(
wxEVT_COMMAND_RADIOBOX_SELECTED
,
wxCommandEventHandler
(
BM2CMP_FRAME_BASE
::
OnOptionsSelection
),
NULL
,
this
);
m_sliderThreshold
->
Disconnect
(
wxEVT_SCROLL_THUMBTRACK
,
wxScrollEventHandler
(
BM2CMP_FRAME_BASE
::
OnThresholdChange
),
NULL
,
this
);
}
bitmap2component/bitmap2cmp_gui_base.fbp
0 → 100644
View file @
65a585b5
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion
major=
"1"
minor=
"9"
/>
<object
class=
"Project"
expanded=
"1"
>
<property
name=
"class_decoration"
></property>
<property
name=
"code_generation"
>
C++
</property>
<property
name=
"disconnect_events"
>
1
</property>
<property
name=
"encoding"
>
UTF-8
</property>
<property
name=
"event_generation"
>
connect
</property>
<property
name=
"file"
>
bitmap2cmp_gui_base
</property>
<property
name=
"first_id"
>
1000
</property>
<property
name=
"help_provider"
>
none
</property>
<property
name=
"internationalize"
>
1
</property>
<property
name=
"name"
>
bitmap2cmp_gui
</property>
<property
name=
"namespace"
></property>
<property
name=
"path"
>
.
</property>
<property
name=
"precompiled_header"
></property>
<property
name=
"relative_path"
>
1
</property>
<property
name=
"use_enum"
>
0
</property>
<property
name=
"use_microsoft_bom"
>
0
</property>
<object
class=
"Frame"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"center"
></property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"extra_style"
></property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
BM2CMP_FRAME_BASE
</property>
<property
name=
"pos"
></property>
<property
name=
"size"
>
500,419
</property>
<property
name=
"style"
>
wxDEFAULT_FRAME_STYLE
</property>
<property
name=
"subclass"
></property>
<property
name=
"title"
>
Bitmap to Component Converter
</property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
>
wxTAB_TRAVERSAL
</property>
<property
name=
"xrc_skip_sizer"
>
1
</property>
<event
name=
"OnActivate"
></event>
<event
name=
"OnActivateApp"
></event>
<event
name=
"OnChar"
></event>
<event
name=
"OnClose"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnHibernate"
></event>
<event
name=
"OnIconize"
></event>
<event
name=
"OnIdle"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
<object
class=
"wxBoxSizer"
expanded=
"1"
>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
bMainSizer
</property>
<property
name=
"orient"
>
wxHORIZONTAL
</property>
<property
name=
"permission"
>
none
</property>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxEXPAND
</property>
<property
name=
"proportion"
>
1
</property>
<object
class=
"wxNotebook"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"bitmapsize"
></property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_notebook1
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"size"
></property>
<property
name=
"style"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnNotebookPageChanged"
></event>
<event
name=
"OnNotebookPageChanging"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
<object
class=
"notebookpage"
expanded=
"1"
>
<property
name=
"bitmap"
></property>
<property
name=
"label"
>
Original Picture
</property>
<property
name=
"select"
>
1
</property>
<object
class=
"wxScrolledWindow"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"maximum_size"
>
-1,-1
</property>
<property
name=
"minimum_size"
>
400,300
</property>
<property
name=
"name"
>
m_InitialPicturePanel
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"scroll_rate_x"
>
5
</property>
<property
name=
"scroll_rate_y"
>
5
</property>
<property
name=
"size"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
>
wxHSCROLL|wxVSCROLL
</property>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
>
OnPaint
</event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"notebookpage"
expanded=
"1"
>
<property
name=
"bitmap"
></property>
<property
name=
"label"
>
Greyscale Picture
</property>
<property
name=
"select"
>
0
</property>
<object
class=
"wxScrolledWindow"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"maximum_size"
>
-1,-1
</property>
<property
name=
"minimum_size"
>
400,300
</property>
<property
name=
"name"
>
m_GreyscalePicturePanel
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"scroll_rate_x"
>
5
</property>
<property
name=
"scroll_rate_y"
>
5
</property>
<property
name=
"size"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
>
wxHSCROLL|wxVSCROLL
</property>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
>
OnPaint
</event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"notebookpage"
expanded=
"1"
>
<property
name=
"bitmap"
></property>
<property
name=
"label"
>
Binary Picture
</property>
<property
name=
"select"
>
0
</property>
<object
class=
"wxScrolledWindow"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_BNPicturePanel
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"scroll_rate_x"
>
5
</property>
<property
name=
"scroll_rate_y"
>
5
</property>
<property
name=
"size"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
>
wxHSCROLL|wxVSCROLL
</property>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
>
OnPaint
</event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
</object>
</object>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxEXPAND
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxBoxSizer"
expanded=
"1"
>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
brightSizer
</property>
<property
name=
"orient"
>
wxVERTICAL
</property>
<property
name=
"permission"
>
none
</property>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxEXPAND|wxALIGN_CENTER_HORIZONTAL
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxGrid"
expanded=
"1"
>
<property
name=
"autosize_cols"
>
0
</property>
<property
name=
"autosize_rows"
>
1
</property>
<property
name=
"bg"
></property>
<property
name=
"cell_bg"
></property>
<property
name=
"cell_font"
></property>
<property
name=
"cell_horiz_alignment"
>
wxALIGN_LEFT
</property>
<property
name=
"cell_text"
></property>
<property
name=
"cell_vert_alignment"
>
wxALIGN_TOP
</property>
<property
name=
"col_label_horiz_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"col_label_size"
>
30
</property>
<property
name=
"col_label_values"
>
"
Value
"
</property>
<property
name=
"col_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"cols"
>
1
</property>
<property
name=
"column_sizes"
>
80
</property>
<property
name=
"context_help"
></property>
<property
name=
"drag_col_move"
>
0
</property>
<property
name=
"drag_col_size"
>
1
</property>
<property
name=
"drag_grid_size"
>
0
</property>
<property
name=
"drag_row_size"
>
1
</property>
<property
name=
"editing"
>
0
</property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"grid_line_color"
></property>
<property
name=
"grid_lines"
>
1
</property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"label_bg"
></property>
<property
name=
"label_font"
></property>
<property
name=
"label_text"
></property>
<property
name=
"margin_height"
>
0
</property>
<property
name=
"margin_width"
>
0
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_gridInfo
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"row_label_horiz_alignment"
>
wxALIGN_RIGHT
</property>
<property
name=
"row_label_size"
>
80
</property>
<property
name=
"row_label_values"
>
"
Size X
"
"
Size Y
"
"
BPP
"
</property>
<property
name=
"row_label_vert_alignment"
>
wxALIGN_CENTRE
</property>
<property
name=
"row_sizes"
></property>
<property
name=
"rows"
>
3
</property>
<property
name=
"size"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnGridCellChange"
></event>
<event
name=
"OnGridCellLeftClick"
></event>
<event
name=
"OnGridCellLeftDClick"
></event>
<event
name=
"OnGridCellRightClick"
></event>
<event
name=
"OnGridCellRightDClick"
></event>
<event
name=
"OnGridCmdCellChange"
></event>
<event
name=
"OnGridCmdCellLeftClick"
></event>
<event
name=
"OnGridCmdCellLeftDClick"
></event>
<event
name=
"OnGridCmdCellRightClick"
></event>
<event
name=
"OnGridCmdCellRightDClick"
></event>
<event
name=
"OnGridCmdColSize"
></event>
<event
name=
"OnGridCmdEditorCreated"
></event>
<event
name=
"OnGridCmdEditorHidden"
></event>
<event
name=
"OnGridCmdEditorShown"
></event>
<event
name=
"OnGridCmdLabelLeftClick"
></event>
<event
name=
"OnGridCmdLabelLeftDClick"
></event>
<event
name=
"OnGridCmdLabelRightClick"
></event>
<event
name=
"OnGridCmdLabelRightDClick"
></event>
<event
name=
"OnGridCmdRangeSelect"
></event>
<event
name=
"OnGridCmdRowSize"
></event>
<event
name=
"OnGridCmdSelectCell"
></event>
<event
name=
"OnGridColSize"
></event>
<event
name=
"OnGridEditorCreated"
></event>
<event
name=
"OnGridEditorHidden"
></event>
<event
name=
"OnGridEditorShown"
></event>
<event
name=
"OnGridLabelLeftClick"
></event>
<event
name=
"OnGridLabelLeftDClick"
></event>
<event
name=
"OnGridLabelRightClick"
></event>
<event
name=
"OnGridLabelRightDClick"
></event>
<event
name=
"OnGridRangeSelect"
></event>
<event
name=
"OnGridRowSize"
></event>
<event
name=
"OnGridSelectCell"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxButton"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"default"
>
0
</property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"label"
>
Load Bitmap
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_buttonLoad
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"size"
></property>
<property
name=
"style"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<event
name=
"OnButtonClick"
>
OnLoadFile
</event>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxButton"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"default"
>
0
</property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"label"
>
Export to eeschema
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_buttonExportEeschema
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"size"
></property>
<property
name=
"style"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<event
name=
"OnButtonClick"
>
OnExportEeschema
</event>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxButton"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"default"
>
0
</property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"label"
>
Export to Pcbnew
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_buttonExportPcbnew
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"size"
></property>
<property
name=
"style"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<event
name=
"OnButtonClick"
>
OnExportPcbnew
</event>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxALL|wxEXPAND
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxRadioBox"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"choices"
>
"
Normal
"
"
Negative
"
</property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"label"
>
Options
</property>
<property
name=
"majorDimension"
>
1
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_rbOptions
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"selection"
>
0
</property>
<property
name=
"size"
></property>
<property
name=
"style"
>
wxRA_SPECIFY_COLS
</property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRadioBox"
>
OnOptionsSelection
</event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxTOP|wxRIGHT|wxLEFT
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxStaticText"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"label"
>
Threshold Value:
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_ThresholdText
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"size"
></property>
<property
name=
"style"
></property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<property
name=
"wrap"
>
-1
</property>
<event
name=
"OnChar"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
<object
class=
"sizeritem"
expanded=
"1"
>
<property
name=
"border"
>
5
</property>
<property
name=
"flag"
>
wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT
</property>
<property
name=
"proportion"
>
0
</property>
<object
class=
"wxSlider"
expanded=
"1"
>
<property
name=
"bg"
></property>
<property
name=
"context_help"
></property>
<property
name=
"enabled"
>
1
</property>
<property
name=
"fg"
></property>
<property
name=
"font"
></property>
<property
name=
"hidden"
>
0
</property>
<property
name=
"id"
>
wxID_ANY
</property>
<property
name=
"maxValue"
>
10
</property>
<property
name=
"maximum_size"
></property>
<property
name=
"minValue"
>
0
</property>
<property
name=
"minimum_size"
></property>
<property
name=
"name"
>
m_sliderThreshold
</property>
<property
name=
"permission"
>
protected
</property>
<property
name=
"pos"
></property>
<property
name=
"size"
></property>
<property
name=
"style"
>
wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_LABELS|wxSL_TOP
</property>
<property
name=
"subclass"
></property>
<property
name=
"tooltip"
></property>
<property
name=
"value"
>
5
</property>
<property
name=
"window_extra_style"
></property>
<property
name=
"window_name"
></property>
<property
name=
"window_style"
></property>
<event
name=
"OnChar"
></event>
<event
name=
"OnCommandScroll"
></event>
<event
name=
"OnCommandScrollBottom"
></event>
<event
name=
"OnCommandScrollChanged"
></event>
<event
name=
"OnCommandScrollLineDown"
></event>
<event
name=
"OnCommandScrollLineUp"
></event>
<event
name=
"OnCommandScrollPageDown"
></event>
<event
name=
"OnCommandScrollPageUp"
></event>
<event
name=
"OnCommandScrollThumbRelease"
></event>
<event
name=
"OnCommandScrollThumbTrack"
>
OnThresholdChange
</event>
<event
name=
"OnCommandScrollTop"
></event>
<event
name=
"OnEnterWindow"
></event>
<event
name=
"OnEraseBackground"
></event>
<event
name=
"OnKeyDown"
></event>
<event
name=
"OnKeyUp"
></event>
<event
name=
"OnKillFocus"
></event>
<event
name=
"OnLeaveWindow"
></event>
<event
name=
"OnLeftDClick"
></event>
<event
name=
"OnLeftDown"
></event>
<event
name=
"OnLeftUp"
></event>
<event
name=
"OnMiddleDClick"
></event>
<event
name=
"OnMiddleDown"
></event>
<event
name=
"OnMiddleUp"
></event>
<event
name=
"OnMotion"
></event>
<event
name=
"OnMouseEvents"
></event>
<event
name=
"OnMouseWheel"
></event>
<event
name=
"OnPaint"
></event>
<event
name=
"OnRightDClick"
></event>
<event
name=
"OnRightDown"
></event>
<event
name=
"OnRightUp"
></event>
<event
name=
"OnScroll"
></event>
<event
name=
"OnScrollBottom"
></event>
<event
name=
"OnScrollChanged"
></event>
<event
name=
"OnScrollLineDown"
></event>
<event
name=
"OnScrollLineUp"
></event>
<event
name=
"OnScrollPageDown"
></event>
<event
name=
"OnScrollPageUp"
></event>
<event
name=
"OnScrollThumbRelease"
></event>
<event
name=
"OnScrollThumbTrack"
></event>
<event
name=
"OnScrollTop"
></event>
<event
name=
"OnSetFocus"
></event>
<event
name=
"OnSize"
></event>
<event
name=
"OnUpdateUI"
></event>
</object>
</object>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>
bitmap2component/bitmap2cmp_gui_base.h
0 → 100644
View file @
65a585b5
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Apr 16 2008)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __bitmap2cmp_gui_base__
#define __bitmap2cmp_gui_base__
#include <wx/intl.h>
#include <wx/scrolwin.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/string.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/notebook.h>
#include <wx/grid.h>
#include <wx/button.h>
#include <wx/radiobox.h>
#include <wx/stattext.h>
#include <wx/slider.h>
#include <wx/sizer.h>
#include <wx/frame.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class BM2CMP_FRAME_BASE
///////////////////////////////////////////////////////////////////////////////
class
BM2CMP_FRAME_BASE
:
public
wxFrame
{
private
:
protected
:
wxNotebook
*
m_notebook1
;
wxScrolledWindow
*
m_InitialPicturePanel
;
wxScrolledWindow
*
m_GreyscalePicturePanel
;
wxScrolledWindow
*
m_BNPicturePanel
;
wxGrid
*
m_gridInfo
;
wxButton
*
m_buttonLoad
;
wxButton
*
m_buttonExportEeschema
;
wxButton
*
m_buttonExportPcbnew
;
wxRadioBox
*
m_rbOptions
;
wxStaticText
*
m_ThresholdText
;
wxSlider
*
m_sliderThreshold
;
// Virtual event handlers, overide them in your derived class
virtual
void
OnPaint
(
wxPaintEvent
&
event
){
event
.
Skip
();
}
virtual
void
OnLoadFile
(
wxCommandEvent
&
event
){
event
.
Skip
();
}
virtual
void
OnExportEeschema
(
wxCommandEvent
&
event
){
event
.
Skip
();
}
virtual
void
OnExportPcbnew
(
wxCommandEvent
&
event
){
event
.
Skip
();
}
virtual
void
OnOptionsSelection
(
wxCommandEvent
&
event
){
event
.
Skip
();
}
virtual
void
OnThresholdChange
(
wxScrollEvent
&
event
){
event
.
Skip
();
}
public
:
BM2CMP_FRAME_BASE
(
wxWindow
*
parent
,
wxWindowID
id
=
wxID_ANY
,
const
wxString
&
title
=
_
(
"Bitmap to Component Converter"
),
const
wxPoint
&
pos
=
wxDefaultPosition
,
const
wxSize
&
size
=
wxSize
(
500
,
419
),
long
style
=
wxDEFAULT_FRAME_STYLE
|
wxTAB_TRAVERSAL
);
~
BM2CMP_FRAME_BASE
();
};
#endif //__bitmap2cmp_gui_base__
bitmap2component/bitmap2component.cpp
View file @
65a585b5
...
...
@@ -32,7 +32,7 @@
#include <vector>
#include "potracelib.h"
#include "bitmap_io.h"
//
#include "bitmap_io.h"
#include "auxiliary.h"
...
...
@@ -49,6 +49,13 @@ enum output_format {
PCBNEW_FMT
,
EESCHEMA_FMT
};
/* free a potrace bitmap */
static
void
bm_free
(
potrace_bitmap_t
*
bm
)
{
if
(
bm
!=
NULL
)
{
free
(
bm
->
map
);
}
free
(
bm
);
}
/* Helper class th handle useful info to convert a bitmpa to
...
...
@@ -185,53 +192,11 @@ void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles )
}
int
main
(
int
argc
,
char
*
argv
[]
)
int
bitmap2component
(
potrace_bitmap_t
*
aPotrace_bitmap
,
FILE
*
aOutfile
,
int
aFormat
)
{
potrace_bitmap_t
*
potrace_bitmap
=
NULL
;
potrace_param_t
*
param
;
potrace_state_t
*
st
;
int
error
;
int
fmt_option
=
'0'
;
FILE
*
infile
,
*
outfile
=
NULL
;
if
(
argc
<
4
)
{
printf
(
"Usage:
\n
bitmap2component <infile_bitmap.ext> <outfile.ext> <0,1,2>
\n
"
);
printf
(
" Allowed bitmap files formats are .bmp or .pgm
\n
"
);
printf
(
"output format:
\n
0 = pcbnew.emp, 1 = eeschema.lib, 2 = ps
\n
"
);
return
-
1
;
}
infile
=
fopen
(
argv
[
1
],
"r"
);
if
(
infile
==
NULL
)
{
printf
(
"File %s could not be opened
\n
"
,
argv
[
1
]
);
return
-
2
;
}
outfile
=
fopen
(
argv
[
2
],
"w"
);
if
(
outfile
==
NULL
)
{
printf
(
"File %s could not be opened
\n
"
,
argv
[
2
]
);
return
-
2
;
}
double
threshold
=
0.5
;
// = 0 to 1.0
error
=
bm_read
(
infile
,
threshold
,
&
potrace_bitmap
);
if
(
error
!=
0
)
{
printf
(
"Bitmap %s could not be read
\n
"
,
argv
[
1
]
);
return
-
2
;
}
if
(
!
potrace_bitmap
)
{
fprintf
(
stderr
,
"Error allocating bitmap: %s
\n
"
,
strerror
(
errno
)
);
return
1
;
}
/* set tracing parameters, starting from defaults */
param
=
potrace_param_default
();
...
...
@@ -243,7 +208,7 @@ int main( int argc, char* argv[] )
param
->
turdsize
=
0
;
/* convert the bitmap to curves */
st
=
potrace_trace
(
param
,
p
otrace_bitmap
);
st
=
potrace_trace
(
param
,
aP
otrace_bitmap
);
if
(
!
st
||
st
->
status
!=
POTRACE_STATUS_OK
)
{
fprintf
(
stderr
,
"Error tracing bitmap: %s
\n
"
,
strerror
(
errno
)
);
...
...
@@ -251,41 +216,40 @@ int main( int argc, char* argv[] )
}
BITMAPCONV_INFO
info
;
info
.
m_PixmapWidth
=
p
otrace_bitmap
->
w
;
info
.
m_PixmapHeight
=
p
otrace_bitmap
->
h
;
// the bitmap size in pixels
info
.
m_PixmapWidth
=
aP
otrace_bitmap
->
w
;
info
.
m_PixmapHeight
=
aP
otrace_bitmap
->
h
;
// the bitmap size in pixels
info
.
m_Paths
=
st
->
plist
;
info
.
m_Outfile
=
o
utfile
;
info
.
m_Outfile
=
aO
utfile
;
if
(
argc
>=
4
)
fmt_option
=
argv
[
3
][
0
];
switch
(
fmt_option
)
switch
(
aFormat
)
{
case
'2'
:
case
2
:
info
.
m_Format
=
POSTSCRIPT_FMT
;
info
.
m_ScaleX
=
info
.
m_ScaleY
=
1.0
;
// the conversion scale
/* output vector data, e.g. as a rudimentary EPS file */
CreateOutputFile
(
info
);
break
;
case
'1'
:
case
1
:
info
.
m_Format
=
EESCHEMA_FMT
;
info
.
m_ScaleX
=
info
.
m_ScaleY
=
1000.0
/
300
;
// the conversion scale
info
.
m_ScaleX
=
1000.0
/
300
;
// the conversion scale
info
.
m_ScaleY
=
-
info
.
m_ScaleX
;
// Y axis is bottom to Top for components in libs
CreateOutputFile
(
info
);
break
;
case
'0'
:
case
0
:
info
.
m_Format
=
PCBNEW_FMT
;
info
.
m_ScaleX
=
10000.0
/
300
;
// the conversion scale
info
.
m_ScaleY
=
-
info
.
m_ScaleX
;
// Y axis is top to bottom in modedit
info
.
m_ScaleX
=
10000.0
/
300
;
// the conversion scale
info
.
m_ScaleY
=
info
.
m_ScaleX
;
// Y axis is top to bottom in modedit
CreateOutputFile
(
info
);
break
;
default
:
printf
(
"Unknown output format
\n
"
);
break
;
break
;
}
CreateOutputFile
(
info
);
bm_free
(
potrace_bitmap
);
bm_free
(
aPotrace_bitmap
);
potrace_state_free
(
st
);
potrace_param_free
(
param
);
...
...
bitmap2component/gui_bm2cmp.cpp
0 → 100644
View file @
65a585b5
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/image.h"
#include "wx/file.h"
#include "wx/filename.h"
#include "wx/mstream.h"
#include "wx/wfstream.h"
#include "wx/quantize.h"
#if wxUSE_CLIPBOARD
#include "wx/dataobj.h"
#include "wx/clipbrd.h"
#endif // wxUSE_CLIPBOARD
#if defined(__WXMSW__)
#ifdef wxHAVE_RAW_BITMAP
#include "wx/rawbmp.h"
#endif
#endif
#if defined(__WXMAC__) || defined(__WXGTK__)
#define wxHAVE_RAW_BITMAP
#include "wx/rawbmp.h"
#endif
// derived classes
class
BM_TO_CMP_FRAME
;
class
BM_TO_CMP_APP
;
// MyCanvas
class
MyCanvas
:
public
wxScrolledWindow
{
public
:
MyCanvas
(
wxWindow
*
parent
,
wxWindowID
,
const
wxPoint
&
pos
,
const
wxSize
&
size
);
~
MyCanvas
();
private
:
void
OnPaint
(
wxPaintEvent
&
event
);
DECLARE_EVENT_TABLE
()
};
// BM_TO_CMP_FRAME
class
BM_TO_CMP_FRAME
:
public
wxFrame
{
public
:
BM_TO_CMP_FRAME
();
void
OnAbout
(
wxCommandEvent
&
event
);
void
OnNewFrame
(
wxCommandEvent
&
event
);
#ifdef wxHAVE_RAW_BITMAP
void
OnTestRawBitmap
(
wxCommandEvent
&
event
);
#endif // wxHAVE_RAW_BITMAP
void
OnQuit
(
wxCommandEvent
&
event
);
#if wxUSE_CLIPBOARD
void
OnCopy
(
wxCommandEvent
&
event
);
void
OnPaste
(
wxCommandEvent
&
event
);
#endif // wxUSE_CLIPBOARD
MyCanvas
*
m_canvas
;
private
:
DECLARE_DYNAMIC_CLASS
(
BM_TO_CMP_FRAME
)
DECLARE_EVENT_TABLE
()
};
class
MyImageFrame
:
public
wxFrame
{
public
:
MyImageFrame
(
wxFrame
*
parent
,
const
wxBitmap
&
bitmap
)
:
wxFrame
(
parent
,
wxID_ANY
,
_T
(
"Double click to save"
),
wxDefaultPosition
,
wxDefaultSize
,
wxCAPTION
|
wxSYSTEM_MENU
|
wxCLOSE_BOX
),
m_bitmap
(
bitmap
)
{
SetClientSize
(
bitmap
.
GetWidth
(),
bitmap
.
GetHeight
());
}
void
OnEraseBackground
(
wxEraseEvent
&
WXUNUSED
(
event
))
{
// do nothing here to be able to see how transparent images are shown
}
void
OnPaint
(
wxPaintEvent
&
WXUNUSED
(
event
))
{
wxPaintDC
dc
(
this
);
dc
.
DrawBitmap
(
m_bitmap
,
0
,
0
,
true
/* use mask */
);
}
void
OnSave
(
wxMouseEvent
&
WXUNUSED
(
event
))
{
#if wxUSE_FILEDLG
wxImage
image
=
m_bitmap
.
ConvertToImage
();
wxString
savefilename
=
wxFileSelector
(
wxT
(
"Save Image"
),
wxEmptyString
,
wxEmptyString
,
(
const
wxChar
*
)
NULL
,
wxT
(
"BMP files (*.bmp)|*.bmp|"
)
wxT
(
"PNG files (*.png)|*.png|"
)
wxT
(
"JPEG files (*.jpg)|*.jpg|"
)
wxT
(
"GIF files (*.gif)|*.gif|"
)
wxT
(
"TIFF files (*.tif)|*.tif|"
)
wxT
(
"PCX files (*.pcx)|*.pcx|"
)
wxT
(
"ICO files (*.ico)|*.ico|"
)
wxT
(
"CUR files (*.cur)|*.cur"
),
wxFD_SAVE
,
this
);
if
(
savefilename
.
empty
()
)
return
;
wxString
extension
;
wxFileName
::
SplitPath
(
savefilename
,
NULL
,
NULL
,
&
extension
);
bool
saved
=
false
;
if
(
extension
==
_T
(
"bmp"
)
)
{
static
const
int
bppvalues
[]
=
{
wxBMP_1BPP
,
wxBMP_1BPP_BW
,
wxBMP_4BPP
,
wxBMP_8BPP
,
wxBMP_8BPP_GREY
,
wxBMP_8BPP_RED
,
wxBMP_8BPP_PALETTE
,
wxBMP_24BPP
};
const
wxString
bppchoices
[]
=
{
_T
(
"1 bpp color"
),
_T
(
"1 bpp B&W"
),
_T
(
"4 bpp color"
),
_T
(
"8 bpp color"
),
_T
(
"8 bpp greyscale"
),
_T
(
"8 bpp red"
),
_T
(
"8 bpp own palette"
),
_T
(
"24 bpp"
)
};
int
bppselection
=
wxGetSingleChoiceIndex
(
_T
(
"Set BMP BPP"
),
_T
(
"Image sample: save file"
),
WXSIZEOF
(
bppchoices
),
bppchoices
,
this
);
if
(
bppselection
!=
-
1
)
{
int
format
=
bppvalues
[
bppselection
];
image
.
SetOption
(
wxIMAGE_OPTION_BMP_FORMAT
,
format
);
if
(
format
==
wxBMP_8BPP_PALETTE
)
{
unsigned
char
*
cmap
=
new
unsigned
char
[
256
];
for
(
int
i
=
0
;
i
<
256
;
i
++
)
cmap
[
i
]
=
(
unsigned
char
)
i
;
image
.
SetPalette
(
wxPalette
(
256
,
cmap
,
cmap
,
cmap
));
delete
[]
cmap
;
}
}
}
else
if
(
extension
==
_T
(
"png"
)
)
{
static
const
int
pngvalues
[]
=
{
wxPNG_TYPE_COLOUR
,
wxPNG_TYPE_COLOUR
,
wxPNG_TYPE_GREY
,
wxPNG_TYPE_GREY
,
wxPNG_TYPE_GREY_RED
,
wxPNG_TYPE_GREY_RED
,
};
const
wxString
pngchoices
[]
=
{
_T
(
"Colour 8bpp"
),
_T
(
"Colour 16bpp"
),
_T
(
"Grey 8bpp"
),
_T
(
"Grey 16bpp"
),
_T
(
"Grey red 8bpp"
),
_T
(
"Grey red 16bpp"
),
};
int
sel
=
wxGetSingleChoiceIndex
(
_T
(
"Set PNG format"
),
_T
(
"Image sample: save file"
),
WXSIZEOF
(
pngchoices
),
pngchoices
,
this
);
if
(
sel
!=
-
1
)
{
image
.
SetOption
(
wxIMAGE_OPTION_PNG_FORMAT
,
pngvalues
[
sel
]);
image
.
SetOption
(
wxIMAGE_OPTION_PNG_BITDEPTH
,
sel
%
2
?
16
:
8
);
}
}
else
if
(
extension
==
_T
(
"cur"
)
)
{
image
.
Rescale
(
32
,
32
);
image
.
SetOption
(
wxIMAGE_OPTION_CUR_HOTSPOT_X
,
0
);
image
.
SetOption
(
wxIMAGE_OPTION_CUR_HOTSPOT_Y
,
0
);
// This shows how you can save an image with explicitly
// specified image format:
saved
=
image
.
SaveFile
(
savefilename
,
wxBITMAP_TYPE_CUR
);
}
if
(
!
saved
)
{
// This one guesses image format from filename extension
// (it may fail if the extension is not recognized):
image
.
SaveFile
(
savefilename
);
}
#endif // wxUSE_FILEDLG
}
private
:
wxBitmap
m_bitmap
;
DECLARE_EVENT_TABLE
()
};
#ifdef wxHAVE_RAW_BITMAP
#include "wx/rawbmp.h"
class
MyRawBitmapFrame
:
public
wxFrame
{
public
:
enum
{
BORDER
=
15
,
SIZE
=
150
,
REAL_SIZE
=
SIZE
-
2
*
BORDER
};
MyRawBitmapFrame
(
wxFrame
*
parent
)
:
wxFrame
(
parent
,
wxID_ANY
,
_T
(
"Raw bitmaps (how exciting)"
)),
m_bitmap
(
SIZE
,
SIZE
,
24
),
m_alphaBitmap
(
SIZE
,
SIZE
,
32
)
{
SetClientSize
(
SIZE
,
SIZE
*
2
+
25
);
InitAlphaBitmap
();
InitBitmap
();
}
void
InitAlphaBitmap
()
{
// First, clear the whole bitmap by making it alpha
{
wxAlphaPixelData
data
(
m_alphaBitmap
,
wxPoint
(
0
,
0
),
wxSize
(
SIZE
,
SIZE
)
);
if
(
!
data
)
{
wxLogError
(
_T
(
"Failed to gain raw access to bitmap data"
));
return
;
}
data
.
UseAlpha
();
wxAlphaPixelData
::
Iterator
p
(
data
);
for
(
int
y
=
0
;
y
<
SIZE
;
++
y
)
{
wxAlphaPixelData
::
Iterator
rowStart
=
p
;
for
(
int
x
=
0
;
x
<
SIZE
;
++
x
)
{
p
.
Alpha
()
=
0
;
++
p
;
// same as p.OffsetX(1)
}
p
=
rowStart
;
p
.
OffsetY
(
data
,
1
);
}
}
// Then, draw colourful alpha-blended stripes
wxAlphaPixelData
data
(
m_alphaBitmap
,
wxPoint
(
BORDER
,
BORDER
),
wxSize
(
REAL_SIZE
,
REAL_SIZE
));
if
(
!
data
)
{
wxLogError
(
_T
(
"Failed to gain raw access to bitmap data"
));
return
;
}
data
.
UseAlpha
();
wxAlphaPixelData
::
Iterator
p
(
data
);
for
(
int
y
=
0
;
y
<
REAL_SIZE
;
++
y
)
{
wxAlphaPixelData
::
Iterator
rowStart
=
p
;
int
r
=
y
<
REAL_SIZE
/
3
?
255
:
0
,
g
=
(
REAL_SIZE
/
3
<=
y
)
&&
(
y
<
2
*
(
REAL_SIZE
/
3
))
?
255
:
0
,
b
=
2
*
(
REAL_SIZE
/
3
)
<=
y
?
255
:
0
;
for
(
int
x
=
0
;
x
<
REAL_SIZE
;
++
x
)
{
// note that RGB must be premultiplied by alpha
unsigned
a
=
(
wxAlphaPixelData
::
Iterator
::
ChannelType
)((
x
*
255.
)
/
REAL_SIZE
);
p
.
Red
()
=
r
*
a
/
256
;
p
.
Green
()
=
g
*
a
/
256
;
p
.
Blue
()
=
b
*
a
/
256
;
p
.
Alpha
()
=
a
;
++
p
;
// same as p.OffsetX(1)
}
p
=
rowStart
;
p
.
OffsetY
(
data
,
1
);
}
}
void
InitBitmap
()
{
// draw some colourful stripes without alpha
wxNativePixelData
data
(
m_bitmap
);
if
(
!
data
)
{
wxLogError
(
_T
(
"Failed to gain raw access to bitmap data"
));
return
;
}
wxNativePixelData
::
Iterator
p
(
data
);
for
(
int
y
=
0
;
y
<
SIZE
;
++
y
)
{
wxNativePixelData
::
Iterator
rowStart
=
p
;
int
r
=
y
<
SIZE
/
3
?
255
:
0
,
g
=
(
SIZE
/
3
<=
y
)
&&
(
y
<
2
*
(
SIZE
/
3
))
?
255
:
0
,
b
=
2
*
(
SIZE
/
3
)
<=
y
?
255
:
0
;
for
(
int
x
=
0
;
x
<
SIZE
;
++
x
)
{
p
.
Red
()
=
r
;
p
.
Green
()
=
g
;
p
.
Blue
()
=
b
;
++
p
;
// same as p.OffsetX(1)
}
p
=
rowStart
;
p
.
OffsetY
(
data
,
1
);
}
}
void
OnPaint
(
wxPaintEvent
&
WXUNUSED
(
event
))
{
wxPaintDC
dc
(
this
);
dc
.
DrawText
(
_T
(
"This is alpha and raw bitmap test"
),
0
,
BORDER
);
dc
.
DrawText
(
_T
(
"This is alpha and raw bitmap test"
),
0
,
SIZE
/
2
-
BORDER
);
dc
.
DrawText
(
_T
(
"This is alpha and raw bitmap test"
),
0
,
SIZE
-
2
*
BORDER
);
dc
.
DrawBitmap
(
m_alphaBitmap
,
0
,
0
,
true
/* use mask */
);
dc
.
DrawText
(
_T
(
"Raw bitmap access without alpha"
),
0
,
SIZE
+
5
);
dc
.
DrawBitmap
(
m_bitmap
,
0
,
SIZE
+
5
+
dc
.
GetCharHeight
());
}
private
:
wxBitmap
m_bitmap
;
wxBitmap
m_alphaBitmap
;
DECLARE_EVENT_TABLE
()
};
#endif // wxHAVE_RAW_BITMAP
// BM_TO_CMP_APP
class
BM_TO_CMP_APP
:
public
wxApp
{
public
:
virtual
bool
OnInit
();
};
// main program
IMPLEMENT_APP
(
BM_TO_CMP_APP
)
// MyCanvas
BEGIN_EVENT_TABLE
(
MyImageFrame
,
wxFrame
)
EVT_ERASE_BACKGROUND
(
MyImageFrame
::
OnEraseBackground
)
EVT_PAINT
(
MyImageFrame
::
OnPaint
)
EVT_LEFT_DCLICK
(
MyImageFrame
::
OnSave
)
END_EVENT_TABLE
()
#ifdef wxHAVE_RAW_BITMAP
BEGIN_EVENT_TABLE
(
MyRawBitmapFrame
,
wxFrame
)
EVT_PAINT
(
MyRawBitmapFrame
::
OnPaint
)
END_EVENT_TABLE
()
#endif // wxHAVE_RAW_BITMAP
BEGIN_EVENT_TABLE
(
MyCanvas
,
wxScrolledWindow
)
EVT_PAINT
(
MyCanvas
::
OnPaint
)
END_EVENT_TABLE
()
MyCanvas
::
MyCanvas
(
wxWindow
*
parent
,
wxWindowID
id
,
const
wxPoint
&
pos
,
const
wxSize
&
size
)
:
wxScrolledWindow
(
parent
,
id
,
pos
,
size
,
wxSUNKEN_BORDER
)
,
m_bmpSmileXpm
(
smile_xpm
)
,
m_iconSmileXpm
(
smile_xpm
)
{
my_horse_ani
=
NULL
;
m_ani_images
=
0
;
SetBackgroundColour
(
*
wxWHITE
);
wxBitmap
bitmap
(
100
,
100
);
wxMemoryDC
dc
;
dc
.
SelectObject
(
bitmap
);
dc
.
SetBrush
(
wxBrush
(
wxT
(
"orange"
),
wxSOLID
)
);
dc
.
SetPen
(
*
wxBLACK_PEN
);
dc
.
DrawRectangle
(
0
,
0
,
100
,
100
);
dc
.
SetBrush
(
*
wxWHITE_BRUSH
);
dc
.
DrawRectangle
(
20
,
20
,
60
,
60
);
dc
.
SelectObject
(
wxNullBitmap
);
// try to find the directory with our images
wxString
dir
;
if
(
wxFile
::
Exists
(
wxT
(
"./horse.png"
))
)
dir
=
wxT
(
"./"
);
else
if
(
wxFile
::
Exists
(
wxT
(
"../horse.png"
))
)
dir
=
wxT
(
"../"
);
else
wxLogWarning
(
wxT
(
"Can't find image files in either '.' or '..'!"
));
wxImage
image
=
bitmap
.
ConvertToImage
();
#if wxUSE_LIBPNG
if
(
!
image
.
SaveFile
(
dir
+
_T
(
"test.png"
),
wxBITMAP_TYPE_PNG
))
wxLogError
(
wxT
(
"Can't save file"
));
image
.
Destroy
();
if
(
image
.
LoadFile
(
dir
+
_T
(
"test.png"
)
)
)
my_square
=
wxBitmap
(
image
);
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.png"
))
)
wxLogError
(
wxT
(
"Can't load PNG image"
));
else
my_horse_png
=
wxBitmap
(
image
);
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"toucan.png"
))
)
wxLogError
(
wxT
(
"Can't load PNG image"
));
else
my_toucan
=
wxBitmap
(
image
);
my_toucan_flipped_horiz
=
wxBitmap
(
image
.
Mirror
(
true
));
my_toucan_flipped_vert
=
wxBitmap
(
image
.
Mirror
(
false
));
my_toucan_flipped_both
=
wxBitmap
(
image
.
Mirror
(
true
).
Mirror
(
false
));
my_toucan_grey
=
wxBitmap
(
image
.
ConvertToGreyscale
());
my_toucan_head
=
wxBitmap
(
image
.
GetSubImage
(
wxRect
(
40
,
7
,
80
,
60
)));
my_toucan_scaled_normal
=
wxBitmap
(
image
.
Scale
(
110
,
90
,
wxIMAGE_QUALITY_NORMAL
));
my_toucan_scaled_high
=
wxBitmap
(
image
.
Scale
(
110
,
90
,
wxIMAGE_QUALITY_HIGH
));
my_toucan_blur
=
wxBitmap
(
image
.
Blur
(
10
));
#endif // wxUSE_LIBPNG
#if wxUSE_LIBJPEG
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.jpg"
))
)
wxLogError
(
wxT
(
"Can't load JPG image"
));
else
{
my_horse_jpeg
=
wxBitmap
(
image
);
// Colorize by rotating green hue to red
wxImage
::
HSVValue
greenHSV
=
wxImage
::
RGBtoHSV
(
wxImage
::
RGBValue
(
0
,
255
,
0
));
wxImage
::
HSVValue
redHSV
=
wxImage
::
RGBtoHSV
(
wxImage
::
RGBValue
(
255
,
0
,
0
));
image
.
RotateHue
(
redHSV
.
hue
-
greenHSV
.
hue
);
colorized_horse_jpeg
=
wxBitmap
(
image
);
}
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"cmyk.jpg"
))
)
wxLogError
(
_T
(
"Can't load CMYK JPG image"
));
else
my_cmyk_jpeg
=
wxBitmap
(
image
);
#endif // wxUSE_LIBJPEG
#if wxUSE_GIF
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.gif"
))
)
wxLogError
(
wxT
(
"Can't load GIF image"
));
else
my_horse_gif
=
wxBitmap
(
image
);
#endif
#if wxUSE_PCX
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.pcx"
),
wxBITMAP_TYPE_PCX
)
)
wxLogError
(
wxT
(
"Can't load PCX image"
));
else
my_horse_pcx
=
wxBitmap
(
image
);
#endif
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.bmp"
),
wxBITMAP_TYPE_BMP
)
)
wxLogError
(
wxT
(
"Can't load BMP image"
));
else
my_horse_bmp
=
wxBitmap
(
image
);
#if wxUSE_XPM
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.xpm"
),
wxBITMAP_TYPE_XPM
)
)
wxLogError
(
wxT
(
"Can't load XPM image"
));
else
my_horse_xpm
=
wxBitmap
(
image
);
if
(
!
image
.
SaveFile
(
dir
+
_T
(
"test.xpm"
),
wxBITMAP_TYPE_XPM
))
wxLogError
(
wxT
(
"Can't save file"
));
#endif
#if wxUSE_PNM
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.pnm"
),
wxBITMAP_TYPE_PNM
)
)
wxLogError
(
wxT
(
"Can't load PNM image"
));
else
my_horse_pnm
=
wxBitmap
(
image
);
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse_ag.pnm"
),
wxBITMAP_TYPE_PNM
)
)
wxLogError
(
wxT
(
"Can't load PNM image"
));
else
my_horse_asciigrey_pnm
=
wxBitmap
(
image
);
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse_rg.pnm"
),
wxBITMAP_TYPE_PNM
)
)
wxLogError
(
wxT
(
"Can't load PNM image"
));
else
my_horse_rawgrey_pnm
=
wxBitmap
(
image
);
#endif
#if wxUSE_LIBTIFF
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.tif"
),
wxBITMAP_TYPE_TIF
)
)
wxLogError
(
wxT
(
"Can't load TIFF image"
));
else
my_horse_tiff
=
wxBitmap
(
image
);
#endif
#if wxUSE_LIBTIFF
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.tga"
),
wxBITMAP_TYPE_TGA
)
)
wxLogError
(
wxT
(
"Can't load TGA image"
));
else
my_horse_tga
=
wxBitmap
(
image
);
#endif
CreateAntiAliasedBitmap
();
my_smile_xbm
=
wxBitmap
(
(
const
char
*
)
smile_bits
,
smile_width
,
smile_height
,
1
);
// demonstrates XPM automatically using the mask when saving
if
(
m_bmpSmileXpm
.
Ok
()
)
m_bmpSmileXpm
.
SaveFile
(
_T
(
"saved.xpm"
),
wxBITMAP_TYPE_XPM
);
#if wxUSE_ICO_CUR
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.ico"
),
wxBITMAP_TYPE_ICO
,
0
)
)
wxLogError
(
wxT
(
"Can't load first ICO image"
));
else
my_horse_ico32
=
wxBitmap
(
image
);
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.ico"
),
wxBITMAP_TYPE_ICO
,
1
)
)
wxLogError
(
wxT
(
"Can't load second ICO image"
));
else
my_horse_ico16
=
wxBitmap
(
image
);
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.ico"
)
)
)
wxLogError
(
wxT
(
"Can't load best ICO image"
));
else
my_horse_ico
=
wxBitmap
(
image
);
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse.cur"
),
wxBITMAP_TYPE_CUR
)
)
wxLogError
(
wxT
(
"Can't load best ICO image"
));
else
{
my_horse_cur
=
wxBitmap
(
image
);
xH
=
30
+
image
.
GetOptionInt
(
wxIMAGE_OPTION_CUR_HOTSPOT_X
)
;
yH
=
2420
+
image
.
GetOptionInt
(
wxIMAGE_OPTION_CUR_HOTSPOT_Y
)
;
}
m_ani_images
=
wxImage
::
GetImageCount
(
dir
+
_T
(
"horse3.ani"
),
wxBITMAP_TYPE_ANI
);
if
(
m_ani_images
==
0
)
wxLogError
(
wxT
(
"No ANI-format images found"
));
else
my_horse_ani
=
new
wxBitmap
[
m_ani_images
];
int
i
;
for
(
i
=
0
;
i
<
m_ani_images
;
i
++
)
{
image
.
Destroy
();
if
(
!
image
.
LoadFile
(
dir
+
_T
(
"horse3.ani"
),
wxBITMAP_TYPE_ANI
,
i
))
{
wxString
tmp
=
wxT
(
"Can't load image number "
);
tmp
<<
i
;
wxLogError
(
tmp
);
}
else
my_horse_ani
[
i
]
=
wxBitmap
(
image
);
}
#endif // wxUSE_ICO_CUR
image
.
Destroy
();
// test image loading from stream
wxFile
file
(
dir
+
_T
(
"horse.bmp"
));
if
(
file
.
IsOpened
()
)
{
wxFileOffset
len
=
file
.
Length
();
size_t
dataSize
=
(
size_t
)
len
;
void
*
data
=
malloc
(
dataSize
);
if
(
file
.
Read
(
data
,
dataSize
)
!=
len
)
wxLogError
(
_T
(
"Reading bitmap file failed"
));
else
{
wxMemoryInputStream
mis
(
data
,
dataSize
);
if
(
!
image
.
LoadFile
(
mis
)
)
wxLogError
(
wxT
(
"Can't load BMP image from stream"
));
else
my_horse_bmp2
=
wxBitmap
(
image
);
}
free
(
data
);
}
}
MyCanvas
::~
MyCanvas
()
{
delete
[]
my_horse_ani
;
}
void
MyCanvas
::
OnPaint
(
wxPaintEvent
&
WXUNUSED
(
event
)
)
{
wxPaintDC
dc
(
this
);
PrepareDC
(
dc
);
dc
.
DrawText
(
_T
(
"Loaded image"
),
30
,
10
);
if
(
my_square
.
Ok
())
dc
.
DrawBitmap
(
my_square
,
30
,
30
);
dc
.
DrawText
(
_T
(
"Drawn directly"
),
150
,
10
);
dc
.
SetBrush
(
wxBrush
(
wxT
(
"orange"
),
wxSOLID
)
);
dc
.
SetPen
(
*
wxBLACK_PEN
);
dc
.
DrawRectangle
(
150
,
30
,
100
,
100
);
dc
.
SetBrush
(
*
wxWHITE_BRUSH
);
dc
.
DrawRectangle
(
170
,
50
,
60
,
60
);
if
(
my_anti
.
Ok
())
dc
.
DrawBitmap
(
my_anti
,
280
,
30
);
dc
.
DrawText
(
_T
(
"PNG handler"
),
30
,
135
);
if
(
my_horse_png
.
Ok
())
{
dc
.
DrawBitmap
(
my_horse_png
,
30
,
150
);
wxRect
rect
(
0
,
0
,
100
,
100
);
wxBitmap
sub
(
my_horse_png
.
GetSubBitmap
(
rect
)
);
dc
.
DrawText
(
_T
(
"GetSubBitmap()"
),
280
,
175
);
dc
.
DrawBitmap
(
sub
,
280
,
195
);
}
dc
.
DrawText
(
_T
(
"JPEG handler"
),
30
,
365
);
if
(
my_horse_jpeg
.
Ok
())
dc
.
DrawBitmap
(
my_horse_jpeg
,
30
,
380
);
dc
.
DrawText
(
_T
(
"Green rotated to red"
),
280
,
365
);
if
(
colorized_horse_jpeg
.
Ok
())
dc
.
DrawBitmap
(
colorized_horse_jpeg
,
280
,
380
);
dc
.
DrawText
(
_T
(
"CMYK JPEG image"
),
530
,
365
);
if
(
my_cmyk_jpeg
.
Ok
())
dc
.
DrawBitmap
(
my_cmyk_jpeg
,
530
,
380
);
dc
.
DrawText
(
_T
(
"GIF handler"
),
30
,
595
);
if
(
my_horse_gif
.
Ok
())
dc
.
DrawBitmap
(
my_horse_gif
,
30
,
610
);
dc
.
DrawText
(
_T
(
"PCX handler"
),
30
,
825
);
if
(
my_horse_pcx
.
Ok
())
dc
.
DrawBitmap
(
my_horse_pcx
,
30
,
840
);
dc
.
DrawText
(
_T
(
"BMP handler"
),
30
,
1055
);
if
(
my_horse_bmp
.
Ok
())
dc
.
DrawBitmap
(
my_horse_bmp
,
30
,
1070
);
dc
.
DrawText
(
_T
(
"BMP read from memory"
),
280
,
1055
);
if
(
my_horse_bmp2
.
Ok
())
dc
.
DrawBitmap
(
my_horse_bmp2
,
280
,
1070
);
dc
.
DrawText
(
_T
(
"PNM handler"
),
30
,
1285
);
if
(
my_horse_pnm
.
Ok
())
dc
.
DrawBitmap
(
my_horse_pnm
,
30
,
1300
);
dc
.
DrawText
(
_T
(
"PNM handler (ascii grey)"
),
280
,
1285
);
if
(
my_horse_asciigrey_pnm
.
Ok
())
dc
.
DrawBitmap
(
my_horse_asciigrey_pnm
,
280
,
1300
);
dc
.
DrawText
(
_T
(
"PNM handler (raw grey)"
),
530
,
1285
);
if
(
my_horse_rawgrey_pnm
.
Ok
())
dc
.
DrawBitmap
(
my_horse_rawgrey_pnm
,
530
,
1300
);
dc
.
DrawText
(
_T
(
"TIFF handler"
),
30
,
1515
);
if
(
my_horse_tiff
.
Ok
())
dc
.
DrawBitmap
(
my_horse_tiff
,
30
,
1530
);
dc
.
DrawText
(
_T
(
"TGA handler"
),
30
,
1745
);
if
(
my_horse_tga
.
Ok
())
dc
.
DrawBitmap
(
my_horse_tga
,
30
,
1760
);
dc
.
DrawText
(
_T
(
"XPM handler"
),
30
,
1975
);
if
(
my_horse_xpm
.
Ok
())
dc
.
DrawBitmap
(
my_horse_xpm
,
30
,
2000
);
// toucans
{
int
x
=
750
,
y
=
10
,
yy
=
170
;
dc
.
DrawText
(
wxT
(
"Original toucan"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"Flipped horizontally"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_flipped_horiz
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"Flipped vertically"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_flipped_vert
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"Flipped both h&v"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_flipped_both
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"In greyscale"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_grey
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"Toucan's head"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_head
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"Scaled with normal quality"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_scaled_normal
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"Scaled with high quality"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_scaled_high
,
x
,
y
+
15
,
true
);
y
+=
yy
;
dc
.
DrawText
(
wxT
(
"Blured"
),
x
+
50
,
y
);
dc
.
DrawBitmap
(
my_toucan_blur
,
x
,
y
+
15
,
true
);
}
if
(
my_smile_xbm
.
Ok
())
{
int
x
=
300
,
y
=
1800
;
dc
.
DrawText
(
_T
(
"XBM bitmap"
),
x
,
y
);
dc
.
DrawText
(
_T
(
"(green on red)"
),
x
,
y
+
15
);
dc
.
SetTextForeground
(
_T
(
"GREEN"
)
);
dc
.
SetTextBackground
(
_T
(
"RED"
)
);
dc
.
DrawBitmap
(
my_smile_xbm
,
x
,
y
+
30
);
dc
.
SetTextForeground
(
*
wxBLACK
);
dc
.
DrawText
(
_T
(
"After wxImage conversion"
),
x
+
120
,
y
);
dc
.
DrawText
(
_T
(
"(red on white)"
),
x
+
120
,
y
+
15
);
dc
.
SetTextForeground
(
wxT
(
"RED"
)
);
wxImage
i
=
my_smile_xbm
.
ConvertToImage
();
i
.
SetMaskColour
(
255
,
255
,
255
);
i
.
Replace
(
0
,
0
,
0
,
wxRED_PEN
->
GetColour
().
Red
(),
wxRED_PEN
->
GetColour
().
Green
(),
wxRED_PEN
->
GetColour
().
Blue
()
);
dc
.
DrawBitmap
(
wxBitmap
(
i
),
x
+
120
,
y
+
30
,
true
);
dc
.
SetTextForeground
(
*
wxBLACK
);
}
wxBitmap
mono
(
60
,
50
,
1
);
wxMemoryDC
memdc
;
memdc
.
SelectObject
(
mono
);
memdc
.
SetPen
(
*
wxBLACK_PEN
);
memdc
.
SetBrush
(
*
wxWHITE_BRUSH
);
memdc
.
DrawRectangle
(
0
,
0
,
60
,
50
);
memdc
.
SetTextForeground
(
*
wxBLACK
);
#ifndef __WXGTK20__
// I cannot convince GTK2 to draw into mono bitmaps
memdc
.
DrawText
(
_T
(
"Hi!"
),
5
,
5
);
#endif
memdc
.
SetBrush
(
*
wxBLACK_BRUSH
);
memdc
.
DrawRectangle
(
33
,
5
,
20
,
20
);
memdc
.
SetPen
(
*
wxRED_PEN
);
memdc
.
DrawLine
(
5
,
42
,
50
,
42
);
memdc
.
SelectObject
(
wxNullBitmap
);
if
(
mono
.
Ok
())
{
int
x
=
300
,
y
=
1900
;
dc
.
DrawText
(
_T
(
"Mono bitmap"
),
x
,
y
);
dc
.
DrawText
(
_T
(
"(red on green)"
),
x
,
y
+
15
);
dc
.
SetTextForeground
(
wxT
(
"RED"
)
);
dc
.
SetTextBackground
(
wxT
(
"GREEN"
)
);
dc
.
DrawBitmap
(
mono
,
x
,
y
+
30
);
dc
.
SetTextForeground
(
*
wxBLACK
);
dc
.
DrawText
(
_T
(
"After wxImage conversion"
),
x
+
120
,
y
);
dc
.
DrawText
(
_T
(
"(red on white)"
),
x
+
120
,
y
+
15
);
dc
.
SetTextForeground
(
wxT
(
"RED"
)
);
wxImage
i
=
mono
.
ConvertToImage
();
i
.
SetMaskColour
(
255
,
255
,
255
);
i
.
Replace
(
0
,
0
,
0
,
wxRED_PEN
->
GetColour
().
Red
(),
wxRED_PEN
->
GetColour
().
Green
(),
wxRED_PEN
->
GetColour
().
Blue
()
);
dc
.
DrawBitmap
(
wxBitmap
(
i
),
x
+
120
,
y
+
30
,
true
);
dc
.
SetTextForeground
(
*
wxBLACK
);
}
// For testing transparency
dc
.
SetBrush
(
*
wxRED_BRUSH
);
dc
.
DrawRectangle
(
20
,
2220
,
560
,
68
);
dc
.
DrawText
(
_T
(
"XPM bitmap"
),
30
,
2230
);
if
(
m_bmpSmileXpm
.
Ok
()
)
dc
.
DrawBitmap
(
m_bmpSmileXpm
,
30
,
2250
,
true
);
dc
.
DrawText
(
_T
(
"XPM icon"
),
110
,
2230
);
if
(
m_iconSmileXpm
.
Ok
()
)
dc
.
DrawIcon
(
m_iconSmileXpm
,
110
,
2250
);
// testing icon -> bitmap conversion
wxBitmap
to_blit
(
m_iconSmileXpm
);
if
(
to_blit
.
Ok
())
{
dc
.
DrawText
(
_T
(
"SubBitmap"
),
170
,
2230
);
wxBitmap
sub
=
to_blit
.
GetSubBitmap
(
wxRect
(
0
,
0
,
15
,
15
)
);
if
(
sub
.
Ok
())
dc
.
DrawBitmap
(
sub
,
170
,
2250
,
true
);
dc
.
DrawText
(
_T
(
"Enlarged"
),
250
,
2230
);
dc
.
SetUserScale
(
1.5
,
1.5
);
dc
.
DrawBitmap
(
to_blit
,
(
int
)(
250
/
1.5
),
(
int
)(
2250
/
1.5
),
true
);
dc
.
SetUserScale
(
2
,
2
);
dc
.
DrawBitmap
(
to_blit
,
(
int
)(
300
/
2
),
(
int
)(
2250
/
2
),
true
);
dc
.
SetUserScale
(
1.0
,
1.0
);
dc
.
DrawText
(
_T
(
"Blit"
),
400
,
2230
);
wxMemoryDC
blit_dc
;
blit_dc
.
SelectObject
(
to_blit
);
dc
.
Blit
(
400
,
2250
,
to_blit
.
GetWidth
(),
to_blit
.
GetHeight
(),
&
blit_dc
,
0
,
0
,
wxCOPY
,
true
);
dc
.
SetUserScale
(
1.5
,
1.5
);
dc
.
Blit
(
(
int
)(
450
/
1.5
),
(
int
)(
2250
/
1.5
),
to_blit
.
GetWidth
(),
to_blit
.
GetHeight
(),
&
blit_dc
,
0
,
0
,
wxCOPY
,
true
);
dc
.
SetUserScale
(
2
,
2
);
dc
.
Blit
(
(
int
)(
500
/
2
),
(
int
)(
2250
/
2
),
to_blit
.
GetWidth
(),
to_blit
.
GetHeight
(),
&
blit_dc
,
0
,
0
,
wxCOPY
,
true
);
dc
.
SetUserScale
(
1.0
,
1.0
);
}
dc
.
DrawText
(
_T
(
"ICO handler (1st image)"
),
30
,
2290
);
if
(
my_horse_ico32
.
Ok
())
dc
.
DrawBitmap
(
my_horse_ico32
,
30
,
2330
,
true
);
dc
.
DrawText
(
_T
(
"ICO handler (2nd image)"
),
230
,
2290
);
if
(
my_horse_ico16
.
Ok
())
dc
.
DrawBitmap
(
my_horse_ico16
,
230
,
2330
,
true
);
dc
.
DrawText
(
_T
(
"ICO handler (best image)"
),
430
,
2290
);
if
(
my_horse_ico
.
Ok
())
dc
.
DrawBitmap
(
my_horse_ico
,
430
,
2330
,
true
);
dc
.
DrawText
(
_T
(
"CUR handler"
),
30
,
2390
);
if
(
my_horse_cur
.
Ok
())
{
dc
.
DrawBitmap
(
my_horse_cur
,
30
,
2420
,
true
);
dc
.
SetPen
(
*
wxRED_PEN
);
dc
.
DrawLine
(
xH
-
10
,
yH
,
xH
+
10
,
yH
);
dc
.
DrawLine
(
xH
,
yH
-
10
,
xH
,
yH
+
10
);
}
dc
.
DrawText
(
_T
(
"ANI handler"
),
230
,
2390
);
for
(
int
i
=
0
;
i
<
m_ani_images
;
i
++
)
{
if
(
my_horse_ani
[
i
].
Ok
())
{
dc
.
DrawBitmap
(
my_horse_ani
[
i
],
230
+
i
*
2
*
my_horse_ani
[
i
].
GetWidth
()
,
2420
,
true
);
}
}
}
void
MyCanvas
::
CreateAntiAliasedBitmap
()
{
wxBitmap
bitmap
(
300
,
300
);
wxMemoryDC
dc
;
dc
.
SelectObject
(
bitmap
);
dc
.
Clear
();
dc
.
SetFont
(
wxFont
(
24
,
wxDECORATIVE
,
wxNORMAL
,
wxNORMAL
)
);
dc
.
SetTextForeground
(
wxT
(
"RED"
)
);
dc
.
DrawText
(
_T
(
"This is anti-aliased Text."
),
20
,
5
);
dc
.
DrawText
(
_T
(
"And a Rectangle."
),
20
,
45
);
dc
.
SetBrush
(
*
wxRED_BRUSH
);
dc
.
SetPen
(
*
wxTRANSPARENT_PEN
);
dc
.
DrawRoundedRectangle
(
20
,
85
,
200
,
180
,
20
);
wxImage
original
=
bitmap
.
ConvertToImage
();
wxImage
anti
(
150
,
150
);
/* This is quite slow, but safe. Use wxImage::GetData() for speed instead. */
for
(
int
y
=
1
;
y
<
149
;
y
++
)
for
(
int
x
=
1
;
x
<
149
;
x
++
)
{
int
red
=
original
.
GetRed
(
x
*
2
,
y
*
2
)
+
original
.
GetRed
(
x
*
2
-
1
,
y
*
2
)
+
original
.
GetRed
(
x
*
2
,
y
*
2
+
1
)
+
original
.
GetRed
(
x
*
2
+
1
,
y
*
2
+
1
);
red
=
red
/
4
;
int
green
=
original
.
GetGreen
(
x
*
2
,
y
*
2
)
+
original
.
GetGreen
(
x
*
2
-
1
,
y
*
2
)
+
original
.
GetGreen
(
x
*
2
,
y
*
2
+
1
)
+
original
.
GetGreen
(
x
*
2
+
1
,
y
*
2
+
1
);
green
=
green
/
4
;
int
blue
=
original
.
GetBlue
(
x
*
2
,
y
*
2
)
+
original
.
GetBlue
(
x
*
2
-
1
,
y
*
2
)
+
original
.
GetBlue
(
x
*
2
,
y
*
2
+
1
)
+
original
.
GetBlue
(
x
*
2
+
1
,
y
*
2
+
1
);
blue
=
blue
/
4
;
anti
.
SetRGB
(
x
,
y
,
(
unsigned
char
)
red
,
(
unsigned
char
)
green
,
(
unsigned
char
)
blue
);
}
my_anti
=
wxBitmap
(
anti
);
}
// BM_TO_CMP_FRAME
enum
{
ID_QUIT
=
wxID_EXIT
,
ID_ABOUT
=
wxID_ABOUT
,
ID_NEW
=
100
,
ID_SHOWRAW
=
101
};
IMPLEMENT_DYNAMIC_CLASS
(
BM_TO_CMP_FRAME
,
wxFrame
)
BEGIN_EVENT_TABLE
(
BM_TO_CMP_FRAME
,
wxFrame
)
EVT_MENU
(
ID_ABOUT
,
BM_TO_CMP_FRAME
::
OnAbout
)
EVT_MENU
(
ID_QUIT
,
BM_TO_CMP_FRAME
::
OnQuit
)
EVT_MENU
(
ID_NEW
,
BM_TO_CMP_FRAME
::
OnNewFrame
)
#ifdef wxHAVE_RAW_BITMAP
EVT_MENU
(
ID_SHOWRAW
,
BM_TO_CMP_FRAME
::
OnTestRawBitmap
)
#endif
#if wxUSE_CLIPBOARD
EVT_MENU
(
wxID_COPY
,
BM_TO_CMP_FRAME
::
OnCopy
)
EVT_MENU
(
wxID_PASTE
,
BM_TO_CMP_FRAME
::
OnPaste
)
#endif // wxUSE_CLIPBOARD
END_EVENT_TABLE
()
BM_TO_CMP_FRAME
::
BM_TO_CMP_FRAME
()
:
wxFrame
(
(
wxFrame
*
)
NULL
,
wxID_ANY
,
_T
(
"wxImage sample"
),
wxPoint
(
20
,
20
),
wxSize
(
950
,
700
)
)
{
wxMenuBar
*
menu_bar
=
new
wxMenuBar
();
wxMenu
*
menuImage
=
new
wxMenu
;
menuImage
->
Append
(
ID_NEW
,
_T
(
"&Show any image...
\t
Ctrl-O"
));
#ifdef wxHAVE_RAW_BITMAP
menuImage
->
Append
(
ID_SHOWRAW
,
_T
(
"Test &raw bitmap...
\t
Ctrl-R"
));
#endif
menuImage
->
AppendSeparator
();
menuImage
->
Append
(
ID_ABOUT
,
_T
(
"&About..."
));
menuImage
->
AppendSeparator
();
menuImage
->
Append
(
ID_QUIT
,
_T
(
"E&xit
\t
Ctrl-Q"
));
menu_bar
->
Append
(
menuImage
,
_T
(
"&Image"
));
#if wxUSE_CLIPBOARD
wxMenu
*
menuClipboard
=
new
wxMenu
;
menuClipboard
->
Append
(
wxID_COPY
,
_T
(
"&Copy test image
\t
Ctrl-C"
));
menuClipboard
->
Append
(
wxID_PASTE
,
_T
(
"&Paste image
\t
Ctrl-V"
));
menu_bar
->
Append
(
menuClipboard
,
_T
(
"&Clipboard"
));
#endif // wxUSE_CLIPBOARD
SetMenuBar
(
menu_bar
);
#if wxUSE_STATUSBAR
CreateStatusBar
(
2
);
int
widths
[]
=
{
-
1
,
100
};
SetStatusWidths
(
2
,
widths
);
#endif // wxUSE_STATUSBAR
m_canvas
=
new
MyCanvas
(
this
,
wxID_ANY
,
wxPoint
(
0
,
0
),
wxSize
(
10
,
10
)
);
// 500 width * 2750 height
m_canvas
->
SetScrollbars
(
10
,
10
,
50
,
275
);
}
void
BM_TO_CMP_FRAME
::
OnQuit
(
wxCommandEvent
&
WXUNUSED
(
event
)
)
{
Close
(
true
);
}
void
BM_TO_CMP_FRAME
::
OnAbout
(
wxCommandEvent
&
WXUNUSED
(
event
)
)
{
(
void
)
wxMessageBox
(
_T
(
"wxImage demo
\n
"
)
_T
(
"Robert Roebling (c) 1998,2000"
),
_T
(
"About wxImage Demo"
),
wxICON_INFORMATION
|
wxOK
);
}
void
BM_TO_CMP_FRAME
::
OnNewFrame
(
wxCommandEvent
&
WXUNUSED
(
event
)
)
{
#if wxUSE_FILEDLG
wxString
filename
=
wxFileSelector
(
_T
(
"Select image file"
));
if
(
!
filename
)
return
;
wxImage
image
;
if
(
!
image
.
LoadFile
(
filename
)
)
{
wxLogError
(
_T
(
"Couldn't load image from '%s'."
),
filename
.
c_str
());
return
;
}
(
new
MyImageFrame
(
this
,
wxBitmap
(
image
)))
->
Show
();
#endif // wxUSE_FILEDLG
}
#ifdef wxHAVE_RAW_BITMAP
void
BM_TO_CMP_FRAME
::
OnTestRawBitmap
(
wxCommandEvent
&
WXUNUSED
(
event
)
)
{
(
new
MyRawBitmapFrame
(
this
))
->
Show
();
}
#endif // wxHAVE_RAW_BITMAP
#if wxUSE_CLIPBOARD
void
BM_TO_CMP_FRAME
::
OnCopy
(
wxCommandEvent
&
WXUNUSED
(
event
))
{
wxBitmapDataObject
*
dobjBmp
=
new
wxBitmapDataObject
;
dobjBmp
->
SetBitmap
(
m_canvas
->
my_horse_png
);
wxTheClipboard
->
Open
();
if
(
!
wxTheClipboard
->
SetData
(
dobjBmp
)
)
{
wxLogError
(
_T
(
"Failed to copy bitmap to clipboard"
));
}
wxTheClipboard
->
Close
();
}
void
BM_TO_CMP_FRAME
::
OnPaste
(
wxCommandEvent
&
WXUNUSED
(
event
))
{
wxBitmapDataObject
dobjBmp
;
wxTheClipboard
->
Open
();
if
(
!
wxTheClipboard
->
GetData
(
dobjBmp
)
)
{
wxLogMessage
(
_T
(
"No bitmap data in the clipboard"
));
}
else
{
(
new
MyImageFrame
(
this
,
dobjBmp
.
GetBitmap
()))
->
Show
();
}
wxTheClipboard
->
Close
();
}
#endif // wxUSE_CLIPBOARD
//-----------------------------------------------------------------------------
// BM_TO_CMP_APP
//-----------------------------------------------------------------------------
bool
BM_TO_CMP_APP
::
OnInit
()
{
wxInitAllImageHandlers
();
wxFrame
*
frame
=
new
BM_TO_CMP_FRAME
();
frame
->
Show
(
true
);
return
true
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment