commit b53a54cded6635f3f7ba4457b8e5e6dcc23453f3
parent ee18caa02234cef0c21b6d2f4cf180e9dd6183c8
Author: ThomasV <thomasv@electrum.org>
Date: Tue, 23 Feb 2016 15:27:00 +0100
remove bmp.py; use Qt instead
Diffstat:
2 files changed, 5 insertions(+), 226 deletions(-)
diff --git a/gui/qt/qrcodewidget.py b/gui/qt/qrcodewidget.py
@@ -6,7 +6,6 @@ import os
import qrcode
import electrum
-from electrum import bmp
from electrum.i18n import _
from util import WindowModalDialog
@@ -101,14 +100,16 @@ class QRDialog(WindowModalDialog):
config = electrum.get_config()
if config:
- filename = os.path.join(config.path, "qrcode.bmp")
+ filename = os.path.join(config.path, "qrcode.png")
def print_qr():
- bmp.save_qrcode(qrw.qr, filename)
+ p = QPixmap.grabWindow(qrw.winId())
+ p.save(filename, 'png')
self.show_message(_("QR code saved to file") + " " + filename)
def copy_to_clipboard():
- bmp.save_qrcode(qrw.qr, filename)
+ p = QPixmap.grabWindow(qrw.winId())
+ p.save(filename, 'png')
QApplication.clipboard().setImage(QImage(filename))
self.show_message(_("QR code copied to clipboard"))
diff --git a/lib/bmp.py b/lib/bmp.py
@@ -1,222 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-bmp.py - module for constructing simple BMP graphics files
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-"""
-__version__ = "0.3"
-__about = "bmp module, version %s, written by Paul McGuire, October, 2003, updated by Margus Laak, September, 2009" % __version__
-
-from math import ceil, hypot
-
-
-def shortToString(i):
- hi = (i & 0xff00) >> 8
- lo = i & 0x00ff
- return chr(lo) + chr(hi)
-
-def longToString(i):
- hi = (long(i) & 0x7fff0000) >> 16
- lo = long(i) & 0x0000ffff
- return shortToString(lo) + shortToString(hi)
-
-def long24ToString(i):
- return chr(i & 0xff) + chr(i >> 8 & 0xff) + chr(i >> 16 & 0xff)
-
-def stringToLong(input_string, offset):
- return ord(input_string[offset+3]) << 24 | ord(input_string[offset+2]) << 16 | ord(input_string[offset+1]) << 8 | ord(input_string[offset])
-
-def stringToLong24(input_string, offset):
- return ord(input_string[offset+2]) << 16 | ord(input_string[offset+1]) << 8 | ord(input_string[offset])
-
-class Color(object):
- """class for specifying colors while drawing BitMap elements"""
- __slots__ = [ 'red', 'grn', 'blu' ]
- __shade = 32
-
- def __init__( self, r=0, g=0, b=0 ):
- self.red = r
- self.grn = g
- self.blu = b
-
- def __setattr__(self, name, value):
- if hasattr(self, name):
- raise AttributeError, "Color is immutable"
- else:
- object.__setattr__(self, name, value)
-
- def __str__( self ):
- return "R:%d G:%d B:%d" % (self.red, self.grn, self.blu )
-
- def __hash__( self ):
- return ( ( long(self.blu) ) +
- ( long(self.grn) << 8 ) +
- ( long(self.red) << 16 ) )
-
- def __eq__( self, other ):
- return (self is other) or (self.toLong == other.toLong)
-
- def lighten( self ):
- return Color(
- min( self.red + Color.__shade, 255),
- min( self.grn + Color.__shade, 255),
- min( self.blu + Color.__shade, 255)
- )
-
- def darken( self ):
- return Color(
- max( self.red - Color.__shade, 0),
- max( self.grn - Color.__shade, 0),
- max( self.blu - Color.__shade, 0)
- )
-
- def toLong( self ):
- return self.__hash__()
-
- def fromLong( l ):
- b = l & 0xff
- l = l >> 8
- g = l & 0xff
- l = l >> 8
- r = l & 0xff
- return Color( r, g, b )
- fromLong = staticmethod(fromLong)
-
-# define class constants for common colors
-Color.BLACK = Color( 0, 0, 0 )
-Color.RED = Color( 255, 0, 0 )
-Color.GREEN = Color( 0, 255, 0 )
-Color.BLUE = Color( 0, 0, 255 )
-Color.CYAN = Color( 0, 255, 255 )
-Color.MAGENTA = Color( 255, 0, 255 )
-Color.YELLOW = Color( 255, 255, 0 )
-Color.WHITE = Color( 255, 255, 255 )
-Color.DKRED = Color( 128, 0, 0 )
-Color.DKGREEN = Color( 0, 128, 0 )
-Color.DKBLUE = Color( 0, 0, 128 )
-Color.TEAL = Color( 0, 128, 128 )
-Color.PURPLE = Color( 128, 0, 128 )
-Color.BROWN = Color( 128, 128, 0 )
-Color.GRAY = Color( 128, 128, 128 )
-
-
-class BitMap(object):
- """class for drawing and saving simple Windows bitmap files"""
-
- LINE_SOLID = 0
- LINE_DASHED = 1
- LINE_DOTTED = 2
- LINE_DOT_DASH=3
- _DASH_LEN = 12.0
- _DOT_LEN = 6.0
- _DOT_DASH_LEN = _DOT_LEN + _DASH_LEN
-
- def __init__( self, width, height,
- bkgd = Color.WHITE, frgd = Color.BLACK ):
- self.wd = int( ceil(width) )
- self.ht = int( ceil(height) )
- self.bgcolor = 0
- self.fgcolor = 1
- self.palette = []
- self.palette.append( bkgd.toLong() )
- self.palette.append( frgd.toLong() )
- self.currentPen = self.fgcolor
-
- tmparray = [ self.bgcolor ] * self.wd
- self.bitarray = [ tmparray[:] for i in range( self.ht ) ]
- self.currentPen = 1
-
-
- def plotPoint( self, x, y ):
- if ( 0 <= x < self.wd and 0 <= y < self.ht ):
- x = int(x)
- y = int(y)
- self.bitarray[y][x] = self.currentPen
-
-
- def _saveBitMapNoCompression( self ):
- line_padding = (4 - (self.wd % 4)) % 4
-
- # write bitmap header
- _bitmap = "BM"
- _bitmap += longToString( 54 + self.ht*(self.wd*3 + line_padding) ) # DWORD size in bytes of the file
- _bitmap += longToString( 0 ) # DWORD 0
- _bitmap += longToString( 54 )
- _bitmap += longToString( 40 ) # DWORD header size = 40
- _bitmap += longToString( self.wd ) # DWORD image width
- _bitmap += longToString( self.ht ) # DWORD image height
- _bitmap += shortToString( 1 ) # WORD planes = 1
- _bitmap += shortToString( 24 ) # WORD bits per pixel = 8
- _bitmap += longToString( 0 ) # DWORD compression = 0
- _bitmap += longToString( self.ht * (self.wd * 3 + line_padding) ) # DWORD sizeimage = size in bytes of the bitmap = width * height
- _bitmap += longToString( 0 ) # DWORD horiz pixels per meter (?)
- _bitmap += longToString( 0 ) # DWORD ver pixels per meter (?)
- _bitmap += longToString( 0 ) # DWORD number of colors used = 256
- _bitmap += longToString( 0 ) # DWORD number of "import colors = len( self.palette )
-
- # write pixels
- self.bitarray.reverse()
- rows = []
- for row in self.bitarray:
- for pixel in row:
- c = self.palette[pixel]
- rows.append(long24ToString(c))
- rows.append(chr(0) * line_padding)
- _bitmap += ''.join(rows)
-
- return _bitmap
-
-
-
- def saveFile( self, filename):
- _b = self._saveBitMapNoCompression( )
-
- f = file(filename, 'wb')
- f.write(_b)
- f.close()
-
-
-def save_qrcode(qr, filename):
- matrix = qr.get_matrix()
- k = len(matrix)
- bitmap = BitMap( (k+2)*8, (k+2)*8 )
- bitmap.bitarray = []
- for r in range(k+2):
- tmparray = [ 0 ] * (k+2)*8
-
- if 0 < r < k+1:
- for c in range(k):
- if matrix[r-1][c]:
- tmparray[ (1+c)*8:(2+c)*8] = [1]*8
-
- for i in range(8):
- bitmap.bitarray.append( tmparray[:] )
-
- bitmap.saveFile( filename )
-
-
-
-if __name__ == "__main__":
-
- bmp = BitMap( 10, 10 )
- bmp.plotPoint( 5, 5 )
- bmp.plotPoint( 0, 0 )
- bmp.saveFile( "test.bmp" )