copying a string???
Keith Dart
kdart at kdart.com
Mon Aug 26 05:00:44 EDT 2002
In article <3D64ECE9.C47AB519 at mill.co.uk>, "Joe Connellan"
<joec at mill.co.uk> penned these words:
> The string I pass to changeString() represents an 8 bit image for
> processing. The images I am processing are very large so it is more
> efficient for my function to change the pixel values of the input image
> rather than allocating enough memory for an output image to write into.
> I need to display before and after images once the processing is done -
> at the moment my before image changes with the after.
>
> If I shouldn't be changing the string, do you know of a better way of
> going about it? - I do need the image data to be stored as a string -
> for PIL and PyOpenGL reasons, and I can't afford to allocate memory for
> more than one image at a time.
You might try the mmap module. This acts as both a file and a mutable
string. I have a buffer class that wraps it:
class Buffer:
def __init__(self, size=8192):
self.size = size
self._fd = os.open("/dev/zero", os.O_RDWR)
self._buf = mmap.mmap(self._fd, size, access=mmap.ACCESS_COPY)
def __del__(self):
self.close()
def close(self):
self._buf.close()
self._buf = None
os.close(self._fd)
def getvalue(self):
return self._buf[:]
def fileno(self):
return self._fd
# auto-delegate most attributes
def __getattr__(self, name):
return getattr(self._buf, name)
def __getitem__(self, i):
return self._buf[i]
def __setitem__(self, i, v):
self._buf[i] = v
def __getslice__(self, i, j):
return self._buf[i:j]
def __setslice__(self, i, j, seq):
self._buf[i:j] = seq
def __iadd__(self, seq):
self._buf.write(seq)
return self
def __len__(self):
return self._buf.tell()
def __str__(self):
return self._buf[0:self._buf.tell()]
-- ^
\/ \/
(O O)
-- --------------------oOOo~(_)~oOOo----------------------------------------
Keith Dart
<mailto:kdart at kdart.com>
<http://www.kdart.com/>
----------------------------------------------------------------------------
Public key ID: B08B9D2C Public key: <http://www.kdart.com/~kdart/public.key>
============================================================================
More information about the Python-list
mailing list