CN1672940A - 具有用于重叠打印头元件的补偿的喷墨打印机 - Google Patents
具有用于重叠打印头元件的补偿的喷墨打印机 Download PDFInfo
- Publication number
- CN1672940A CN1672940A CN200510063190.2A CN200510063190A CN1672940A CN 1672940 A CN1672940 A CN 1672940A CN 200510063190 A CN200510063190 A CN 200510063190A CN 1672940 A CN1672940 A CN 1672940A
- Authority
- CN
- China
- Prior art keywords
- const
- int
- pct
- printer
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000007639 printing Methods 0.000 title abstract description 13
- 239000011159 matrix material Substances 0.000 claims description 22
- 238000006073 displacement reaction Methods 0.000 claims description 3
- 230000001105 regulatory effect Effects 0.000 abstract 1
- 241001673391 Entandrophragma candollei Species 0.000 description 25
- 238000000034 method Methods 0.000 description 22
- 239000000976 ink Substances 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 238000012360 testing method Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000007641 inkjet printing Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000005259 measurement Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 229920003043 Cellulose fiber Polymers 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000008602 contraction Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 239000000975 dye Substances 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 239000000834 fixative Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000000691 measurement method Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000007645 offset printing Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000000049 pigment Substances 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 229920003051 synthetic elastomer Polymers 0.000 description 1
- 239000005061 synthetic rubber Substances 0.000 description 1
- 230000036962 time dependent Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
- B41J2/01—Ink jet
- B41J2/015—Ink jet characterised by the jet generation process
- B41J2/04—Ink jet characterised by the jet generation process generating single droplets or particles on demand
- B41J2/045—Ink jet characterised by the jet generation process generating single droplets or particles on demand by pressure, e.g. electromechanical transducers
- B41J2/04501—Control methods or devices therefor, e.g. driver circuits, control circuits
- B41J2/04586—Control methods or devices therefor, e.g. driver circuits, control circuits controlling heads of a type not covered by groups B41J2/04575 - B41J2/04585, or of an undefined type
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
- B41J2/01—Ink jet
- B41J2/015—Ink jet characterised by the jet generation process
- B41J2/04—Ink jet characterised by the jet generation process generating single droplets or particles on demand
- B41J2/045—Ink jet characterised by the jet generation process generating single droplets or particles on demand by pressure, e.g. electromechanical transducers
- B41J2/04501—Control methods or devices therefor, e.g. driver circuits, control circuits
- B41J2/04505—Control methods or devices therefor, e.g. driver circuits, control circuits aiming at correcting alignment
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
- B41J2/01—Ink jet
- B41J2/015—Ink jet characterised by the jet generation process
- B41J2/04—Ink jet characterised by the jet generation process generating single droplets or particles on demand
- B41J2/045—Ink jet characterised by the jet generation process generating single droplets or particles on demand by pressure, e.g. electromechanical transducers
- B41J2/04501—Control methods or devices therefor, e.g. driver circuits, control circuits
- B41J2/04563—Control methods or devices therefor, e.g. driver circuits, control circuits detecting head temperature; Ink temperature
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
- B41J2/01—Ink jet
- B41J2/015—Ink jet characterised by the jet generation process
- B41J2/04—Ink jet characterised by the jet generation process generating single droplets or particles on demand
- B41J2/045—Ink jet characterised by the jet generation process generating single droplets or particles on demand by pressure, e.g. electromechanical transducers
- B41J2/04501—Control methods or devices therefor, e.g. driver circuits, control circuits
- B41J2/0459—Height of the driving signal being adjusted
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
- B41J2/01—Ink jet
- B41J2/135—Nozzles
- B41J2/145—Arrangement thereof
- B41J2/155—Arrangement thereof for line printing
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J2/00—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed
- B41J2/005—Typewriters or selective printing mechanisms characterised by the printing or marking process for which they are designed characterised by bringing liquid or particles selectively into contact with a printing material
- B41J2/01—Ink jet
- B41J2/21—Ink jet for multi-colour printing
- B41J2/2132—Print quality control characterised by dot disposition, e.g. for reducing white stripes or banding
- B41J2/2135—Alignment of dots
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B41—PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
- B41J—TYPEWRITERS; SELECTIVE PRINTING MECHANISMS, i.e. MECHANISMS PRINTING OTHERWISE THAN FROM A FORME; CORRECTION OF TYPOGRAPHICAL ERRORS
- B41J29/00—Details of, or accessories for, typewriters or selective printing mechanisms not otherwise provided for
- B41J29/38—Drives, motors, controls or automatic cut-off devices for the entire printing mechanism
- B41J29/393—Devices for controlling or analysing the entire machine ; Controlling or analysing mechanical parameters involving printing of test patterns
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/46—Colour picture communication systems
- H04N1/50—Picture reproducers
Landscapes
- Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Ink Jet (AREA)
- Particle Formation And Scattering Control In Inkjet Printers (AREA)
- Application Of Or Painting With Fluid Materials (AREA)
Abstract
Description
static void ObtainMisregistrationTransferFunction ( int dotsPerPixel, int subdotsPerDot, BI_Image const& dotImage, char const* pDotImageName, char const* pRefDotImageName, int const overlapSize, <!-- SIPO <DP n="9"> --> <dp n="d9"/> int const overlapIndex, //0..overlapSize-1 int const misregFactor, BI_Image const& ditherMatrix, BI_LUT& lutv, BI_LUT& lut0, BI_LUT& lut1 ); class RLE_DotLine { public: RLE_DotLine() :m_whiteRun(0),m_blackRun(0){} RLE_DotLine(int whiteRun,int blackRun) :m_whiteRun(whiteRun),m_blackRun(blackRun) {} int WhiteRun()const{return m_whiteRun;} int BlackRun()const{return m_blackRun;} private: int m_whiteRun; int m_blackRun; }; typedef vector<RLE_DotLine,allocator<RLE_DotLine>>RLE_Dot; static void Usage() { fprintf(stderr,″usage:SegmentDither\n″); fprintf(stderr,″ inputImage\n″); fprintf(stderr,″ dotsPerPixel\n″); fprintf(stderr,″ subdotsPerDot\n″); fprintf(stderr,″ dotImage\n″); fprintf(stderr,″ refDotImage\n″); fprintf(stderr,″ overlapCenter\n″); fprintf(stderr,″ overlapSize\n″); fprintf(stderr,″ misregFactor\n″); fprintf(stderr,″ ditherMatrix\n″); fprintf(stderr,″ outputImage\n″); fprintf(stderr,″ outputResolution\n″); exit(1); } <!-- SIPO <DP n="10"> --> <dp n="d10"/> static void BadArgument(char const* pErrorMsg) { fprintf(stderr,″SegmentDither:argument error:%s\n″,pErrorMsg); exit(1); } #define CHECK_ARGUMENT(cond)if(cond) BadArgument(#cond) static double MisregDots(int const misregFactor) { return(double)misregFactor/1000; } static int MisregSubdots(int const misregFactor,int const subdotsPerDot) { return(int)BU_Round(MisregDots(misregFactor)*subdotsPerDot); } static void PutDot ( int const subdotsPerDot, RLE_Dot const& rleDot, int const dotRow, int const dotCol, int const misregFactor, BI_Image& outputImage ) { int const misregSubdots=MisregSubdots(misregFactor,subdotsPerDot); int const subdotRow=dotRow*subdotsPerDot; int const subdotCol=dotCol*subdotsPerDot; int const dotOverlap=rleDot.size()-subdotsPerDot; int const dotMargin=dotOverlap/2; <!-- SIPO <DP n="11"> --> <dp n="d11"/> RLE_Dot∷const_iterator ii=rleDot.begin(); for(int i=0;i<rleDot.size();i++,ii++) { int const row=subdotRow-dotMargin+i; if(row<0‖row>=outputImage.Height()) continue; int const whiteRun=(*ii).WhiteRun(); int blackRun=(*ii).BlackRun(); int col=subdotCol-dotMargin+whiteRun+misregSubdots; if(col<0) { blackRun+=col; col=0; } if(col+blackRun>=outputImage.Width()) blackRun=outputImage.Width()-col; if(blackRun<=0) continue; BU_ExpandBitRun ( outputImage.Image(row), col, outputImage.Width(), blackRun, 1 ); } } static void MergeScale ( double const scale, int& v, double& f0, double& f1 ) { <!-- SIPO <DP n="12"> --> <dp n="d12"/> double const vScaled=(double)v*scale; if(vScaled<=255.0) { v=(int)BU_Round(vScaled); } else { v=255; double const fScale=vScaled/255.0; f0*=fScale; f1*=fScale; } } static void Dither ( BI_Image const& inputImage, BI_LUT const& lutDotGain, int const dotsPerPixel, int const subdotsPerDot, BI_Image const& dotImage, char const*pDotImageName, char const*pRefDotImageName, int const overlapCenter, int const overl.apSize, int const misregFactor, BI_Image const& ditherMatrix, BI_Image& outputImage, int const outputResolution, bool const bRetain, bool const bSklpLHS, bool const bSk.pRHS, bool const bFixedInterp=false, double const flxedF0=0, double const flxedF1=0 ) { ∥compute overlap interval int const overl.apStart=overlapCenter-(overlapSize/2); int const overLapEnd=overlapStart+overlapSize-1; <!-- SIPO <DP n="13"> --> <dp n="d13"/> //copy and invert dither matrix BI_Image ditherMatrix2; ditherMatrix2=ditherMatrix; BI_Invert(ditherMatrix2); //initialise and clear output image int const subdotsPerPixel=dotsPerPixel*subdotsPerDot; int const bilevelHeight=inputImage.Height()*subdotsPerPixel; int const bilevelWidth=inputImage.Width()*subdotsPerPixel; if (!bRetain) { //initialise outputImage.Initialise ( BI_ColorModel(BI_ColorGrayscale,1), bilevelHeight, bilevelWidth, outputResolution, outputResolution }; //clear BI_CC*pOutputRow=outputImage.Image(); for(int j=0;j<outputImage.Height();j++) { BU_ClearLine(pOutputRow,outputImage.Width()); pOutputRow+=outputImage.RowSize(); } } //convert dot image to RLE RLE Dot rleDot; for(int i=0;i<dotImage.Height();i++) { int const whiteRun=BU GetBitRun ( dotImage.Image(i), 0, dotImage.Width(), 0// white ); int blackRun; if(whiteRun==dotImage.Width()) <!-- SIPO <DP n="14"> --> <dp n="d14"/> { blackRun=0; } else { blackRun=BU_GetBitRun ( dotImage.Image(i), whiteRun, dotImage.Width(), 1//black ); } rleDot.push_back(RLE_DotLine(whiteRun,blackRun)); } //dither contone input image to bi-level output image I_CC const*pImage=inputImage.Image(); BI_CC const*pRow=pImage; BI_CC const*pDither=ditherMatrix. Image(); BI_CC const*pDitherRow=pDither; BI_CC const*pDither2=ditherMatrix2.Image(); BI_CC const*pDitherRow2=pDither2; int ditherRow=0; for(int row=0;row<inputImage.Height();row++) { for(int dotRow=0;dotRow<dotsPerPixel;dotRow++) { int const globalDotRow=(row*dotsPerPixel)+dotRow; BI_CC const*pPixel=pRow; BI_CC const*pDitherPixel=pDitherRow; BI_CC const* pDitherPixel2=pDitherRow2; int ditherCol=0; for(int col=0;col<inputImage.Width();col++) { int const vRaw=*pPixel++; int const vDotGain=lutDotGain[vRaw]; for(int dotCol=0;dotCol<otsPerPixel; dotCol++) { int vRawDot=vRaw; int const t0=*pDitherPixel; int const t1=t0;//*pDitherPixel2; <!-- SIPO <DP n="15"> --> <dp n="d15"/> int const globalDotCol=(col* dotsPerPixel)+dotCol; //interpolate intensities in overlap region and dither //one or the other or both if(!bFixedInterp && globalDotCol< overlapStart) { int const t=t0; if((vDotGain==255)‖(vDotGain>= t && vDotGain!=0)) { if(!bSkipLHS) { PutDot ( subdotsPerDot, rleDot, globalDotRow, globalDotCol, 0, outputImage ); } } } else if(!bFixedInterp && overlapEnd< globalDotCol) { int const t=(overlapSize==0)? t0:t1; if((vDotGain==255)‖(vDotGain>= t && vDotGain!=0)) { if(!bSkipRHS) { PutDot ( subdotePerDot, rleDot, <!-- SIPO <DP n="16"> --> <dp n="d16"/> globalDotRow, globalDotCol, misregFactor, outputImage ); } } } else { #if 1 //account for stretch or shrink if(!bFixedInterp) { double const misregDots= MisregDots(misregFactor); double const newOverlapSize= overlapSize+misregDots; double const overlapScale= newOverlapSize/overlapSize; vRawDot= (int)BU_Round(vRawDot*overlapScale); if(vRawDot>255) vRawDot=255; //MergeScale(overlapScale, vRawDot,f0,f1); } #endif #if 1 //compute interpolation factors double f0,f1; if(bFixedInterp) { f0=fixedF0; f1=fixedF1; } else { //compute overlap index int const overlapIndex= <!-- SIPO <DP n="17"> --> <dp n="d17"/> globalDotCol- overlapStart; //obtain misregistration LUTs BI_LUT lutv; BI_LUT lut0; BI_LUT lut1; ObtainMisregistrationTransferFunction ( dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, pRefDotImageName, overlapSize, overlapIndex, misregFactor, ditherMatrix, lutv, lut0, lut1 ); //retrieve interpolation factors f0=(double)lut0[vRawDot]/ 255; f1=(double)lut1[vRawDot]/ 255; if(globalDotCol> overlapCenter) BU_Swap(f0,f1); //adjust intensity for attenuation vRawDot=lutv[vRawDot]; } #endif //diagnostics //printf(″f0=%5.1lf f1=%5.1lf(%5.1lf) vRaw=%d v=%d\n″, <!-- SIPO <DP n="18"> --> <dp n="d18"/> // f0,f1,f0+f1,vRaw, vRawDot); //interpolate dither with jitter int vd=0; int v0d=0; int v1d=0; if((vRawDot==255)‖(vRawDot>= t0&& vRawDot!=0)) { vd=1; } double const rr=(double)rand()/ RAND_MAX; if (vd && rr<f0) { v0d=1; if(!bSkipLHS) { PutDot ( subdotsPerDot, rleDot, globalDotRow, globalDotCol, 0, outputImage ); } } if(vd && (1.0-rr)<=f1) { v1d=1; if(!bSkipRHS) { PutDot ( subdotsPerDot, rleDot, globalDotRow, globalDotCol, <!-- SIPO <DP n="19"> --> <dp n="d19"/> misregFactor, outputImage ); } } #if 0 if(globalDotRow==864) { printf(″%1d %1d %1d(%3d %3d %3d %3d)″, vd,v0d,v1d,vRawDot, v0,v1,v0+v1); if(v0d+v1d<vd) printf(″?″); if(v0d+v1d>vd) printf(″#″); printf(″\n″); } #endif } pDitherPixel++; pDitherPixel2++; ditherCol++; if(ditherCol>=ditherMatrix.Width()) { pDitherPixel=pDitherRow; pDitherPixel2=pDitherRow2; ditherCol=0; } } } pDitherRow+=ditherMatrix.RowSize(); pDitherRow2+=ditherMatrix2.RowSize(); ditherRow++; if(ditherRow>=ditherMatrix.Height()) { pDitherRow=pDither; pDitherRow2=pDither2; ditherRow=0; } } pRow+=inputImage.RowSize(); <!-- SIPO <DP n="20"> --> <dp n="d20"/> } } static void ChangeFileSuffix ( char const*pPath, char const*pSuffix, char const*pExt, char path[_MAX_PATH] } { char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; _splitpath(pPath,drive,dir,fname,ext); strcat(fname,pSuffix); _makepath(path,drive,dir,fname,pExt); } static void LogTransferFunction(char const*pType,double const intensity[],int const v) { printf(″%s:%03d:%5.1lf(%5.1lf)\n″, pType,v,intensity[v],v-intensity[v]); } static void ComputeMisregistrationTransferFunction ( int dotsPerPixel, int subdotsPerDot, BI_Image const& dotImage, char const*pDotImageName, double const f0, double const f1, int const misregFactor, BI_Image const& ditherMatrix, BI_LUT& lutv, <!-- SIPO <DP n="21"> --> <dp n="d21"/> BI_LUT& lut0, BI_LUT& lut1 } { //create test image BI_Image testImage; testImage.Initialise ( BI_ColorModel(BI_ColorGrayscale), ditherMatrix.Height(), ditherMatrix.Width() ); //build identity transfer function BI_LUT identityLut; for(int v=0;v<256;v++) identityLut[v]=v; //create output image BI_Image outputImage; //compute intensity for each gray level double intensity[512]; int vLast; for(v=0;v<512;v++) { //compute extended interpolation factors double f0x,f1x; int vx; if(v<=255) { vx=v; f0x=f0; fix=f1; } else { vx=255; double const fScale=(double)v/255.0; f0x=f0*fScale; f1x=f1*fScale; } <!-- SIPO <DP n="22"> --> <dp n="d22"/> //set test image to next intensity testImage=BI_Color((BI_CC)vx); //dither test image to bi-level output Dither { testImage, identityLut, dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, pDotImageName, 0,0, //no explicit overlap misregFactor, ditherMatrix, outputImage, 72, //output resolution false, //don′t retain output image false, //don′t skip LHS false, //don′t skip PHS true, //fixed interpolation f0x, f1x }; //determine intensity of dithered bi-level output long nDots=0; BI_CC const*pRow=outputImage.Image(); for(int row=0;row<outputImage.Height();row++) { nDots+=BU_CountBits(pRow,0,outputImage.Width()); pRow+=outputImage.RowSize(); } intensity[v]=255*(double)nDots/outputImage.PixelCount(); //LogTransferFunction(″misreg″,intensity,v); vLast=v; if(intensity[v]>=255) break; } LogTransferFunction(″misreg″,intensity,1); LogTransferFunction(″misreg″,intensity,vLast); <!-- SIPO <DP n="23"> --> <dp n="d23"/> //create LUTs for(int x=0;x<256;x++) { double d=-1; for(v=0;v<=vLast;v++) { double const d2=BU_Abs(intensity[v]-x); if (d<0‖d2<d) { d=d2; if(v<=255) { lutv[x]=v; int const k0=(int)BU_Round(f0*255); lut0[x]=(BI_CC)BU_Min(k0,255); int const k1=(int)BU_Round(f1*255); lut1[x]=(BI_CC)BU_Min(k1,255); } else { lutv[x]=255; int const k0=(int)BU_Round(f0*v); lut0[x]=(BI_CC)BU_Min(k0,255); int const k1=(int)BU_Round(f1*v); lut1[x]=(BI_CC)BU_Min(k1,255); if(k0>255‖k1>255) { fprintf(stderr,″k0=%d k1=%d (x=%d v=%d f0=%5.1lf f1=%5.1lf\n″, k0,k1,x,v,f0,f1); } } } } } } static void SimplifyFraction(int& n,int& d) { for(int i=n;i>1&& n>1;--i) <!-- SIPO <DP n="24"> --> <dp n="d24"/> { if((d%i)==0) { if((n%i ==0) { n/=i; d/=i; } } } } static void ObtainMisregistrationTransferFunction<br/> { int dotsPerPixel, int subdotsPerDot, BI_Image const& dotImage, char const*pDotImageName, char const*pRefDotImageName, int const overlapSize, int const rawOverlapIndex,//0.. overlapSize-1 int const misregFactor, BI_Image const& ditherMatrix, BI_LUT& lutv, BI_LUT& lut0, BI_LUT& lut1 { //normalize overlap index int overlapIndex=rawOverlapIndex; if(overlapIndex>=((overlapSize+1)/2)) overlapIndex=(overlapSize-1)-overlapIndex; char lutvName[_MAX_PATH]; char lut0Name[_MAX_PATH]; char lutlName[_MAX_PATH]; char suffix[_MAX_FNAME]; int interpNum=overlapIndex+1; int interpDenom=overlapSize+1; SimplifyFraction(interpNum,interpDenom); <!-- SIPO <DP n="25"> --> <dp n="d25"/> sprintf(suffix,″_%03d_%02d_%02d″, BU_Abs(misregFactor),interpNum,interpDenom); ChangeFileSuffix(pRefDotImageName,suffix,″.amp″,lutvName); sprintf(suffix,″_%03d_%02d_%02d_0″, BU_Abs(misregFactor),interpNum,interpDenom); ChangeFileSuffix(pRefDotImageName,suffix,″.amp″,lut0Name); sprintf(suffix,″_%03d_%02d_%02d_1″, BU_Abs(misregFactor),interpNum,interpDenom); ChangeFileSuffix(pRefDotImageName,suffix,″.amp″,lut1Name); try { BU_File lutvFile(lutvName,_O_BINARY|_O_RDONLY); lutv.Load(lutvFile); BU_File lut0File(lut0Name,_O_BINARY|_O_RDONLY); lut0.Load(lut0File); BU_File lut1File(lut1Name,_O_BINARY|_O_RDONLY); lut1.Load(lut1File); } catch (...) { //if using a reference dot image,LUTs must already exist if(strcmp(pDotImageName,pRefDotImageName)!=0) { fprintf(stderr,″can′t load %s or %s or %s\n″, lutvName,lut0Name,lut1Name); exit(1); } //determine interpolation factors double f1=(double)interpNum/interpDenom; double f0=1.0-f1; ComputeMisregistrationTransferFunction ( dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, f0, <!-- SIPO <DP n="26"> --> <dp n="d26"/> f1, BU_Abs(misregFactor), ditherMatrix, lutv, lut0, lut1 ); BU_File lutvFile(lutvName,_O_BINARY|_O_WRONLY|_O_CREAT); lutv. Save(lutvFile); BU_File lut0File(lut0Name,_O_BINARY|_O_WRONLY|_O_CREAT); lutO.Save(lut0File); BU_File lut1File(lutlName,_O_BINARY|_O_WRONLY|_O_CREAT); lutl.Save(lut1File); } } static void ComputeDotGainTransferFunction ( int dotsPerPixel, int subdotsPerDot, BI_Image const& dotImage, char const*pDotImageName, BI_Image const& ditherMatrix, BI_LUT& lutDotGain ) { //create test image BI_Image testImage; testImage. Initialise ( BI_ColorModel(BI_ColorGrayscale), ditherMatrix.Height(), ditherMatrix.Width() ); //build identity transfer function BI_LUT identityTransferFunction; for(int v=0;v<256;v++) identityTransferFunction[v]=v; //create output image <!-- SIPO <DP n="27"> --> <dp n="d27"/> BI_Image outputImage; //compute intensity for each gray level double intensity[256]; for(v=0;v<256;v++) { //set test image to next intensity testImage=BI_Color((BI_CC)v); //dither test image to bi-level output Dither ( testImage, identityTransferFunction, dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, pDotImageName, 0,0, //no overlap 0, //no misregistration ditherMatrix, outputImage, 72, //output resolution false, //don′t retain output image false, //don′t skip LHS false //don′t skip RHS ); //determine intensity of dithered bi-level output long nDots=0; BI_CC const*pRow=outputImage.Image(); for(int row=0;row<outputImage.Height();row++) { nDots+=BU_CountBits(pRow,0,outputImage.Width()); pRow+=outputImage.RowSize(); } intensity[v]=255*(double)nDots/outputImage.PixelCount(); //LogTransferFunction(″dot gain″,intensity,v); } <!-- SIPO <DP n="28"> --> <dp n="d28"/> LogTransferFunction(″dot gain″,intensity,1); LogTransferFunction(″dot gain″,intensity,255); //create LUT for(int x=0;x<256;x++) { double d=-1; for(v=0;v<256;v++) { double const d2=BU_Abs(intensity[v]-x); if(d<0‖d2<d} { d=d2; lutDotGain[x]=v; } } } } static void ObtainDotGainTransferFunction ( int dotsPerPixel, int subdotsPerDot, BI_Image const& dotImage, char const*pDotImageName, char const*pRefDot ImageName, BI_Image const& ditherMatrix, BI_LUT& lutDotGain ) { char lutName[_MAX_PATH]; ChangeFileSuffix(pRefDotImageName,″″,″.amp″,lutName); try { BU_File lutFile (lutName,_O_BINARY|_O_RDONLY); lutDotGain. Load(lutFile); } catch (...) { //if using a reference dot image,LUT must already exist if(strcmp(pDotImageName,pRefDotImageName) !=0) <!-- SIPO <DP n="29"> --> <dp n="d29"/> { fprintf(stderr,″can′t load %s\n″,lutName); exit(1); } ComputeDotGainTransferFunction ( dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, ditherMatrix, lutDotGain ); BU_File lutFile(lutName,_O_BINARY|_O_WRONLY|_O_CREAT); lutDotGain.Save(lutFile); } } static void SegmentDither(int argc,char*argv[]) { //parse arguments if(argc!=12) Usage(); char const*pInputImageName=argv[1]; int const dotsPerPixel=atoi(argv[2]); int const subdotsPerDot=atoi(argv[3]); char const*pDotImageName=argv[4]; char const*pRefDotImageName=argv[5]; int const overlapCenter=atoi(argv[6]); int const overlapSize=atoi(argv[7]); int const misregFactor=atoi(argv[8]); int const misregSubdots=MisregSubdots(misregFactor,subdotsPerDot); char const*pDitherMatrixName=argv[9]; char const*pOutputImageName=argv[10]; int const outputResolution=atoi(argv[11]); //open input image BI_Image inputImage; BI_LoadImage(inputImage,pInputImageName); CHECK_ARGUMENT(inputImage.ColorModel()1= BI_ColorModel(BI_ColorGrayscale)); <!-- SIPO <DP n="30"> --> <dp n="d30"/> BI_Invert(inputImage);// max is black BI_TIFFSetMinIsBlack(false);// max is black // check arguments CHECK_ARGUMENT(dotsPerPixel<1); CHECK_ARGUMENT(dotsPerPixel>16); CHECK_ARGUMENT(subdotsPerDot<1); CHECK_ARGUMENT(subdotsPerDot>32); CHECK_ARGUMENT(overlapCenter<1); CHECK_ARGUMENT(overlapCenter>=inputImage.Width()*dotsPerPixel); CHECK_ARGUMENT(overlapSize<0); CHECK_ARGUMENT(misregSubdots<-subdotsPerDot/2); CHECK_ARGUMENT(misregSubdots>subdotsPerDot/2); CHECK_ARGUMENT(outputResolution<=0); //diagnostics printf(″misregSubdots=%d\n″,misregSubdots); //open dot image BI_Image dotImage; BI_LoadImage(dotImage,pDotImageName); CHECK_ARGUMENT(dotImage.ColorModel()!= BI_ColorModel(BI_ColorGrayscale,1)); CHECK_ARGUMENT(dotImage.Height()<subdotsPerDot); CHECK_ARGUMENT(dotImage.Width()<subdotsPerDot); CHECK_ARGUMENT(dotImage.Height()!=dotImage.Width()); int const dotOverlap=dotImage.Width()-subdotsPerDot; CHECK_ARGUMENT((dotOverlap%2)1=0); //open dither matrix BI_Image ditherMatrix; BI_LoadImage(ditherMatrix,pDitherMatrixName); CHECK_ARGUMENT(ditherMatrix. ColorModel()!= BI_ColorModel(BI_ColorGrayscale,8)); CHECK_ARGUMENT(ditherMatrix.Height()<16); CHECK_ARGUMENT(ditherMatrix.Width()<16); //create output image BI_Image outputImage; //obtain dot gain transfer function for particular dot shape BI_LUT lutDotGain; ObtainDotGainTransferFunction <!-- SIPO <DP n="31"> --> <dp n="d31"/> ( dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, pRefDotImageName, ditherMatrix, lutDotGain ); //dither input to bi-level output Dither ( inputImage, lutDotGain, dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, pRefDotImageName, overlapCenter, overlapSize, misregFactor, ditherMatrix, outputImage, outputResolution, false, //don′t retain output image false, //don′t skip LHS false //don′t skip RHS ); BI_SaveImage(outputImage,pOutputImageName); //dither input to bi-level output (LHS only) BI_Image outputImageLHS; Dither ( inputImage, lutDotGain, dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, pRefDotImageName, <!-- SIPO <DP n="32"> --> <dp n="d32"/> overlapCenter, overlapSize, misregFactor, ditherMatrix, outputImageLHS, outputResolution, false, //don′t retain output image false, //don′t skip IHS true //skip RHS ); BI_SaveImage(outputImageLHS,″OutLHS.GIF″); //dither input to bi-level output(RHS only) BI_Image outputImageRHS; Dither ( inputImage, lutDotGain, dotsPerPixel, subdotsPerDot, dotImage, pDotImageName, pRefDotImageName, overlapCenter, overlapSize, misregFactor, ditherMatrix, outputImageRHS, outputResolution, false, //don′t retain output image true, //skip LHS false //don′t skip RHS ); BI_SaveImage(outputImageRHS,″OutRHS.GIF″); //dither input to bi-level output (no interp) BI_Image outputImageNoInterp; Dither ( inputImage, lutDotGain, dotsPerPixel, subdotsPerDot, <!-- SIPO <DP n="33"> --> <dp n="d33"/> dotImage, pDotImageName, pRefDotImageName, overlapCenter, overlapSize, misregFactor, ditherMatrix, outputImageNoInterp, outputResolution, false, //don′t retain output image false, //skip LHS false, //don′t skip RHS true, //fixed interp 0, //f0 0 //f1 ); BI_SaveImage(outputImageNoInterp,″OutNoInterp.GIF″); } void main(int argc,char * argv[]) { try { SegmentDither(argc,argv); } catch (BU_Error error) { error. Print(); } exit(0); }。
Claims (7)
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/AU2000/000593 WO2001089845A1 (en) | 2000-05-24 | 2000-05-24 | Method and apparatus for compensation for time varying nozzle misalignment in a drop on demand printhead |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN00819578.1A Division CN1205043C (zh) | 2000-05-24 | 2000-05-24 | 用于补偿喷墨打印头中喷嘴随时间变化发生错位的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1672940A true CN1672940A (zh) | 2005-09-28 |
CN1321819C CN1321819C (zh) | 2007-06-20 |
Family
ID=3700812
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN00819578.1A Expired - Fee Related CN1205043C (zh) | 2000-05-24 | 2000-05-24 | 用于补偿喷墨打印头中喷嘴随时间变化发生错位的方法和装置 |
CNB2005100631902A Expired - Lifetime CN1321819C (zh) | 2000-05-24 | 2000-05-24 | 具有用于重叠打印头元件的补偿的喷墨打印机 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN00819578.1A Expired - Fee Related CN1205043C (zh) | 2000-05-24 | 2000-05-24 | 用于补偿喷墨打印头中喷嘴随时间变化发生错位的方法和装置 |
Country Status (10)
Country | Link |
---|---|
US (3) | US7201460B1 (zh) |
EP (1) | EP1301347B1 (zh) |
JP (1) | JP4460206B2 (zh) |
CN (2) | CN1205043C (zh) |
AT (1) | ATE367926T1 (zh) |
AU (2) | AU2000247328B2 (zh) |
DE (1) | DE60035715T2 (zh) |
IL (3) | IL153025A (zh) |
WO (1) | WO2001089845A1 (zh) |
ZA (1) | ZA200209791B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101523416B (zh) * | 2006-10-03 | 2013-03-27 | 萨尔技术有限公司 | 用于打印的方法和系统 |
CN104441977A (zh) * | 2013-09-19 | 2015-03-25 | 精工爱普生株式会社 | 排出头单元和图像记录装置 |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7044585B2 (en) | 2000-05-23 | 2006-05-16 | Silverbrook Research Pty Ltd | Method of generating halftone print data for overlapping end portions of printhead chips |
US6464332B1 (en) * | 2000-05-23 | 2002-10-15 | Silverbrook Research Pty Ltd. | Method and apparatus for the compensation for time varying nozzle misalignment in a drop on demand printhead |
CN1205043C (zh) * | 2000-05-24 | 2005-06-08 | 西尔弗布鲁克研究有限公司 | 用于补偿喷墨打印头中喷嘴随时间变化发生错位的方法和装置 |
JP4276811B2 (ja) * | 2002-02-26 | 2009-06-10 | オリンパス株式会社 | 画像記録装置 |
JP4717342B2 (ja) | 2003-12-02 | 2011-07-06 | キヤノン株式会社 | インクジェット記録装置及び方法 |
JP4804043B2 (ja) * | 2005-06-03 | 2011-10-26 | キヤノン株式会社 | インクジェット記録装置、インクジェット記録方法、および記録制御形態の設定方法 |
JP5213317B2 (ja) * | 2006-08-22 | 2013-06-19 | キヤノン株式会社 | インクジェット記録装置およびインクジェット記録方法 |
JP5272528B2 (ja) * | 2008-06-09 | 2013-08-28 | セイコーエプソン株式会社 | 記録装置、及び記録方法 |
JP4983982B2 (ja) * | 2008-06-09 | 2012-07-25 | コニカミノルタホールディングス株式会社 | 画像記録方法および画像記録装置 |
CN103269854B (zh) * | 2010-12-23 | 2015-04-22 | 利乐拉瓦尔集团及财务有限公司 | 改进的苯胺印刷、装置以及方法 |
JP2016107406A (ja) * | 2014-12-02 | 2016-06-20 | 株式会社リコー | 画像処理装置、画像処理システム、画像処理プログラムおよび立体物の生産方法 |
JP2017081110A (ja) * | 2015-10-30 | 2017-05-18 | キヤノン株式会社 | 画像処理装置および画像処理方法 |
CN109254742B (zh) * | 2018-10-13 | 2021-11-09 | 深圳市汉森软件有限公司 | 喷墨打印方法、喷墨打印装置及喷墨打印设备 |
CN113858802B (zh) * | 2020-06-30 | 2022-10-21 | 森大(深圳)技术有限公司 | 消除喷头拼接道的方法、装置、设备及存储介质 |
CN111844917B (zh) * | 2020-08-07 | 2021-01-15 | 广东金海科技实业有限责任公司 | 一种水洗充皮纸的环保制作工艺 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0034060A1 (en) | 1980-02-08 | 1981-08-19 | The Mead Corporation | Ink jet printer |
CN1048451C (zh) * | 1989-06-15 | 2000-01-19 | 株式会社亚玛托亚商会 | 喷墨式打印机 |
US4977410A (en) * | 1989-09-14 | 1990-12-11 | Seiko Instruments Inc. | Thermal line printer with staggered head segments and overlap compensation |
JP2891799B2 (ja) | 1991-06-07 | 1999-05-17 | キヤノン株式会社 | インクジェット記録方法 |
US5600354A (en) | 1992-04-02 | 1997-02-04 | Hewlett-Packard Company | Wrap-around flex with address and data bus |
US5450099A (en) | 1993-04-08 | 1995-09-12 | Eastman Kodak Company | Thermal line printer with staggered head segments and overlap compensation |
JP3174226B2 (ja) * | 1994-10-28 | 2001-06-11 | キヤノン株式会社 | 記録ヘッド補正方法及びその装置及びその装置によって補正された記録ヘッド及びその記録ヘッドを用いた記録装置 |
US5767874A (en) | 1996-03-14 | 1998-06-16 | Eastman Kodak Company | Printing uniformity using narrow printhead segments in digital printers |
US6312099B1 (en) | 1997-01-21 | 2001-11-06 | Eastman Kodak Company | Printing uniformity using printhead segments in pagewidth digital printers |
EP0914950A3 (en) * | 1997-11-06 | 1999-12-08 | Xerox Corporation | An ink jet printhead assembled from partial width array printheads |
JP3596725B2 (ja) * | 1998-05-20 | 2004-12-02 | 株式会社リコー | インクジェット記録装置及び記憶媒体 |
JPH11334051A (ja) * | 1998-05-28 | 1999-12-07 | Toshiba Tec Corp | インクジェット記録装置 |
US6213579B1 (en) | 1998-11-24 | 2001-04-10 | Lexmark International, Inc. | Method of compensation for the effects of thermally-induced droplet size variations in ink drop printers |
US6464332B1 (en) * | 2000-05-23 | 2002-10-15 | Silverbrook Research Pty Ltd. | Method and apparatus for the compensation for time varying nozzle misalignment in a drop on demand printhead |
CN1205043C (zh) * | 2000-05-24 | 2005-06-08 | 西尔弗布鲁克研究有限公司 | 用于补偿喷墨打印头中喷嘴随时间变化发生错位的方法和装置 |
-
2000
- 2000-05-24 CN CN00819578.1A patent/CN1205043C/zh not_active Expired - Fee Related
- 2000-05-24 CN CNB2005100631902A patent/CN1321819C/zh not_active Expired - Lifetime
- 2000-05-24 AT AT00929105T patent/ATE367926T1/de not_active IP Right Cessation
- 2000-05-24 AU AU2000247328A patent/AU2000247328B2/en not_active Ceased
- 2000-05-24 DE DE60035715T patent/DE60035715T2/de not_active Expired - Lifetime
- 2000-05-24 IL IL15302500A patent/IL153025A/xx not_active IP Right Cessation
- 2000-05-24 US US10/296,436 patent/US7201460B1/en not_active Expired - Fee Related
- 2000-05-24 EP EP00929105A patent/EP1301347B1/en not_active Expired - Lifetime
- 2000-05-24 WO PCT/AU2000/000593 patent/WO2001089845A1/en active IP Right Grant
- 2000-05-24 JP JP2001586062A patent/JP4460206B2/ja not_active Expired - Fee Related
- 2000-05-24 AU AU4732800A patent/AU4732800A/xx active Pending
-
2002
- 2002-12-03 ZA ZA200209791A patent/ZA200209791B/xx unknown
-
2005
- 2005-02-14 IL IL166876A patent/IL166876A/en not_active IP Right Cessation
- 2005-02-28 IL IL167154A patent/IL167154A/en not_active IP Right Cessation
-
2007
- 2007-02-16 US US11/706,950 patent/US7517037B2/en not_active Expired - Fee Related
-
2009
- 2009-04-13 US US12/422,939 patent/US7837289B2/en not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101523416B (zh) * | 2006-10-03 | 2013-03-27 | 萨尔技术有限公司 | 用于打印的方法和系统 |
CN104441977A (zh) * | 2013-09-19 | 2015-03-25 | 精工爱普生株式会社 | 排出头单元和图像记录装置 |
CN104441977B (zh) * | 2013-09-19 | 2017-10-24 | 精工爱普生株式会社 | 排出头单元和图像记录装置 |
Also Published As
Publication number | Publication date |
---|---|
JP4460206B2 (ja) | 2010-05-12 |
EP1301347A1 (en) | 2003-04-16 |
WO2001089845A1 (en) | 2001-11-29 |
EP1301347A4 (en) | 2005-11-30 |
US7517037B2 (en) | 2009-04-14 |
IL166876A (en) | 2007-07-24 |
ATE367926T1 (de) | 2007-08-15 |
JP2003534171A (ja) | 2003-11-18 |
IL153025A (en) | 2005-06-19 |
AU4732800A (en) | 2001-12-03 |
CN1452557A (zh) | 2003-10-29 |
US20090195586A1 (en) | 2009-08-06 |
CN1205043C (zh) | 2005-06-08 |
US7201460B1 (en) | 2007-04-10 |
DE60035715D1 (de) | 2007-09-06 |
US7837289B2 (en) | 2010-11-23 |
IL153025A0 (en) | 2003-06-24 |
US20070153038A1 (en) | 2007-07-05 |
AU2000247328B2 (en) | 2004-08-12 |
DE60035715T2 (de) | 2008-04-30 |
CN1321819C (zh) | 2007-06-20 |
WO2001089845A8 (en) | 2003-12-24 |
IL167154A (en) | 2007-10-31 |
EP1301347B1 (en) | 2007-07-25 |
ZA200209791B (en) | 2003-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1672940A (zh) | 具有用于重叠打印头元件的补偿的喷墨打印机 | |
US7938498B2 (en) | Inkjet printhead with overlapping segments | |
US8393703B2 (en) | Generating half tone print data for overlapping consecutive printhead segments | |
US20090051717A1 (en) | Ejection condition adjustment apparatus, droplet ejecting apparatus, and ejection condition adjustment method and program | |
US9227398B2 (en) | Printing apparatus and printing control method thereof | |
AU2000247328A1 (en) | Method and apparatus for compensation for time varying nozzle misalignment in a drop on demand printhead | |
EP1693201A1 (en) | Printer, printing method, program and printing system | |
JP2004042369A (ja) | 濃度補正方法 | |
JP2002331692A (ja) | 複数画素を階調再現の1単位とする印刷 | |
JP2007145031A (ja) | 双方向印刷方法および装置 | |
AU2004226970B2 (en) | Inkjet printer having compensation for overlapping printhead elements | |
JP2022025658A (ja) | 画像記録装置及び画像記録方法 | |
JPS62135062A (ja) | マルチヘツドインクジエツトプリンタにおけるドツト位置制御装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: ZAMTEC LTD. Free format text: FORMER OWNER: SILVERBROOK RESEARCH PTY. LTD. Effective date: 20140324 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20140324 Address after: Dublin, Ireland Patentee after: Silverbrook Research Pty Ltd. Address before: New South Wales Australia Patentee before: Silverbrook Research Pty. Ltd. |
|
C56 | Change in the name or address of the patentee |
Owner name: MAGTE TECHNOLOGY CO., LTD. Free format text: FORMER NAME: ZAMTEC LTD. |
|
CP01 | Change in the name or title of a patent holder |
Address after: Dublin, Ireland Patentee after: MEMJET TECHNOLOGY LTD. Address before: Dublin, Ireland Patentee before: Silverbrook Research Pty Ltd. |
|
CX01 | Expiry of patent term |
Granted publication date: 20070620 |
|
CX01 | Expiry of patent term |