Hi <br><br>I've been working on a tool that helps correct contiguous patches of mis-classified imagery with an interactive 'change-value-to:__' using a flood-fill routine and it works - well somewhat :(<br><br>The line i'm using to write the new value:
<br><br>&nbsp;&nbsp; &nbsp;ds.GetRasterBand(1).WriteRaster(s,t,1,1,str(newvalue))<br><br>gives me a raster with values written as 91 no matter what value one actually wants to write . what am i doing wrong?<br><br>the code i've written is provided below (lifted from a routine by Eric Raymond at 
<a href="http://aspn.activestate.com/ASPN/Mail/Message/image-sig/2825804">http://aspn.activestate.com/ASPN/Mail/Message/image-sig/2825804</a>). it uses a copy (saved as ...demo-data/newfile.tif) to avoid mucking up the original file.
<br><br>if you can help...<br><br>thanks<br><br>sujoy<br><br>######################<br>&nbsp;&nbsp;&nbsp; def floodlist(self, pixel=None,line=None,value=None,newvalue=None):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edge = []<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edge.append((pixel,line))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base_ds = 
self.app.view_manager.get_active_view().list_layers()[0].get_parent()<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bbase = vrtutils.serializeDataset(base_ds.get_dataset())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vrtlines = gdal.SerializeXMLTree(bbase)<br>&nbsp;&nbsp; &nbsp;vrtds = gdal.OpenShared
(vrtlines)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driver = gdal.GetDriverByName('GTiff')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fname = os.path.join(gview.home_dir,'demo-data','newtest.tif')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vrtds2 = driver.CreateCopy(fname,vrtds)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while edge:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newedge = []
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (pixel,line) in edge:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (s,t) in ((pixel+1, line), (pixel-1, line), (pixel, line+1), (pixel, line-1)):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newvalue = vrtds2.GetRasterBand(1).ReadAsArray(s,t,1,1)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if newvalue == value:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newedge.append((s,t))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vrtds2.GetRasterBand(1).WriteRaster(s,t,1,1,str(newvalue))<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edge = newedge<br><br>
&nbsp;&nbsp; &nbsp;vrtds2.FlushCache()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.app.open_gdal_dataset(vrtds2)<br><br>