	pro tv_axes,data,ysize=ysize,xoffset=xoffset, $
yoffset=yoffset, tick_pix_min_value=tick_pix_min_value, $
yfactor=yfactor,xfactor=xfactor,sample=sample,scale=scale, $
negative=negative,font=font,charsize=charsize

;	Draws quickly TV image with axes (faster but worse than using CONGRID).

if not keyword_set(scale) then scale=0
if not keyword_set(negative) then negative=0
if n_elements(sample) le 0 then sample=0
if n_elements(font) le 0 then font=-1
if n_elements(charsize) le 0 then charsize=1
if n_elements(xoffset) le 0 then xoffset=40.
if n_elements(yoffset) le 0 then yoffset=50.
if n_elements(ysize) le 0 then ysize=!d.y_size-yoffset-10
if n_elements(tick_pix_min_value) le 0 then $
	tick_pix_min_value=40

sz=(size(data))([1,2])

if n_elements(yfactor) le 0 then yfactor=-1
if yfactor le 0 then yfactor=fix(ysize/sz(1)) > 1


det=[negative, (scale ne 0), (yfactor ne 1)]

erase

	CASE 1 OF

equiv(det,[0,0,0]):	tv, data,xoffset,yoffset

equiv(det,[0,0,1]):	tv, rebin(data,sz(0), $
	sz(1)*yfactor, sam=sample), xoffset,yoffset

equiv(det,[0,1,0]):	tv, bytscl(data),xoffset,yoffset

equiv(det,[0,1,1]):	tv, bytscl(rebin(data,sz(0), $
	sz(1)*yfactor, sam=sample)), xoffset,yoffset

equiv(det,[1,0,0]):	tv, 255B-data,xoffset,yoffset

equiv(det,[1,0,1]):	tv, 255B-rebin(data,sz(0), $
	sz(1)*yfactor, sam=sample), xoffset,yoffset

equiv(det,[1,1,0]):	tv, 255B-bytscl(data),xoffset,yoffset

equiv(det,[1,1,1]):	tv, 255B-bytscl(rebin(data,sz(0), $
	sz(1)*yfactor, sam=sample)), xoffset,yoffset

ELSE:
ENDCASE

p_area=reform((convert_coord([xoffset-1, xoffset+sz(0)+1 < (!d.x_vsize-1)], $
	[yoffset-1, yoffset+sz(1)*yfactor+1 < (!d.y_vsize-1)], $
	/dev,/to_norm))([0,1],*),4)

Ypixsize=(p_area(3)-p_area(1))*!d.y_vsize
Xpixsize=(p_area(2)-p_area(0))*!d.x_vsize

xticklen=6./Ypixsize
yticklen=6./Xpixsize

plot,findgen(Xpixsize+2)*Ypixsize/(Xpixsize+1), $
	/noerase,/nodata,charsize=charsize, $
	pos=p_area, xst=1,yst=1,font=font, $
	xtickl=-xticklen, ytickl=-yticklen, $
	xran=[-0.5,Xpixsize-0.5], $
	yran=[-0.5,Ypixsize-0.5]/yfactor

end