//
/* ---------------------------------------------------------------------------------------------- watermark.java 電子透かし ver. 1.00 (JDK 1.02) ueyama@infonet.co.jp 2001.07.29 ---------------------------------------------------------------------------------------------- */ import java.applet.Applet; import java.awt.*; import java.lang.Math; import java.util.*; import java.awt.image.*; public class watermark extends Applet { int Wm[][]={{ 1359225219, 739519490, 696273698},{ 1157640306, 361294033, 679510016}, // 透かしパターン { 1081632880, 722485268, 13165348},{-1302330708,-1558445562,-1071564479}, { 203719808, 822940224, -96196429},{ -661209070, 33701168, 644817984}, {-2013134526,-1044299260, 390513669},{ 1179914432,-2012477409, 134587904}, { 572543648, 403858280,-1594358780},{-2100946808, 18932481,-1920972532}, {-1874705408, 174264956, -116840400},{ 411079304, 1116079712, -939261536}, {-1995210622, 39453696,-1004525689},{ 1024, 643827733, -955244534}, { -523397564, 25219202, 419430883},{ -231103552,-2128895356, 276988164}, { 163, 533516,-1879029760},{ 155238484, 958466, 73431085}, { 1630658568, 763760260, 332400672},{ 138423300,-1272942576, 1074677444}, { 1235222944, 9302048, 39442122},{ 201523509, 560562250, 46142596}, { 17109601, 35870212,-1810657128},{-1878667968, 16813132,-1164344536}, { 21123076, 67469580, 5378560},{-1807219048, 1746960451, -531599092}, { 673977408,-1799351535,-1054594796},{ -297756646, 1079777936, 14970016}, {-1032695019, 67176722, 151259349},{ 36962816, 30017041, 139018316}, { 541459073, -786676984, 557842688},{ 1192804936, -662015858, 1105690657}, { 25356290, 56681024,-2113617913},{ 1360005137, 1644954433,-1515134198}, { 1610647088, 1898284225, 1882788864},{ 559092292, 572621414, 1074539588}, { 3279945, 7361566, 109065964},{ 1345599616, -994046876, 69272210}, { 352848100,-1339291838, 1212238338},{ 92341174, 604284292, 54692867}, { 1145225224, 152080803, 377915584},{-1035925886, -964472429, 343965988}, {-1587436271, 302286722, 3410339},{ 273000452, 607395888,-2147280864}, { 512246185,-2071961468, 322974259},{-2078125913,-1240178688, 273089417}, { 1816592674, 510691328, 67380656},{ 84083680,-2008886517, 542385788}, { 1208025874, 139199832,-1538882483},{ -127780791,-2008476895, 19137249}, { 1099308058, 146805344, -939441324},{-2121037750, 805390470, 1617015817}, { 646988627, 806963334, 1890583128},{-2100523008, 270090526, 674109896}, { 1594113, 390134088, 84494480},{ 1494780984, 1610635324, 138679396}, { 139365440, 18759729, 1627818786},{ 305694344,-1717247231,-2146688475}, { 329266824, 631365655, 80742564},{ 1084693761, 16974088, 289654872}, { 1080445090,-2079749760,-1039794036},{ 721645774, 805339648, 439769242}, { 202006789,-2139033598,-2147344367},{ 4980752,-1065336800, -465358078}, { 2021524532,-2010904576,-2147075296},{ 1225351992, 488640516, 1337554}, {-2013263576, 84819977,-1819117552},{-1006475239, 1082130897, 822430724}, { -534867699,-1296031453, 147720897},{ 105907592, -788512507, 679551425}}; int Wb[][]=new int[96][70]; int Ws=1; // 透かし表示のつよさ int Data[]=new int[384*280]; // 写真データ boolean Bs[]={true, false, true, false, false, false, false}; int Bgc; Graphics gr; Image Img, Gif; Random Rnd=new Random(); public void init() { int i,j,k,l; String Bg=getParameter("BgColor"); Bgc=Integer.valueOf(Bg,16).intValue(); setBackground(new Color(Bgc)); MediaTracker mt=new MediaTracker(this); Img=getImage(getCodeBase(), getParameter("figure")); mt.addImage(Img, 0); Gif=getImage(getCodeBase(), getParameter("button")); mt.addImage(Gif, 0); try { mt.waitForID(0); } catch(InterruptedException e){}; gr=getGraphics(); for(i=0;i<96;i++) for(j=0;j<70;j++) Wb[i][j]=Rnd.nextInt()%3; pxgr(); } public boolean pxgr() { PixelGrabber pg=new PixelGrabber(Img,0,0,384,280,Data,0,384); try { pg.grabPixels(); } catch (InterruptedException ie) {return false;} return true; } public boolean inside(int x, int a, int b) { return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false; } public void dsp_b(int m, int n) { int ox=0, oy=0, x=0, y=0, w=0, h=0; Graphics gx=gr.create(); switch(m) { case 0: x= 77; y=297; ox= 0; oy= 0; w=26; h=23; break; // "P" case 1: x=119; y=297; ox= 0; oy=23; w=26; h=23; break; // "0" case 2: x=149; y=297; ox= 52; oy= 0; w=26; h=23; break; // "1" case 3: x=179; y=297; ox= 52; oy=23; w=26; h=23; break; // "2" case 4: x=209; y=297; ox=104; oy= 0; w=26; h=23; break; // "4" case 5: x=239; y=297; ox=104; oy=23; w=26; h=23; break; // "8" case 6: x=281; y=297; ox=156; oy= 0; w=26; h=23; break; // "W" case 7: x= 77; y=285; ox=156; oy=23; w=24; h=11; break; // "写真" case 8: x=278; y=285; ox=180; oy=23; w=34; h=11; break; // "透し" case 9: x=180; y=284; ox=156; oy=34; w=33; h=11; break; // "つよさ" } gx.clipRect(x,y,w,h); gx.drawImage(Gif,x-(ox+w*n),y-oy,this); gx.dispose(); } public void dsp_wm(int m, boolean p) // 透かしの表示 { int x0,x1,y, i,j, r=0,g=0,b=0, c,w; long f; if(p) gr.drawImage(Img,0,0,384,280,this); else {gr.setColor(new Color(204,204,204)); gr.fillRect(0,0,384,280);} for(y=0;y<70;y++) for(x0=0;x0<3;x0++) { f=2147483648l; for(x1=0;x1<32;x1++) { if((f & Wm[y][x0])>0) { w=Wb[x0*32+x1][y]*m; for(i=0;i<3;i++) for(j=0;j<3;j++) { if(p) { c=Data[(y*4+j)*384+(x0*32+x1)*4+i]&0x00ffffff; r=c/65536; g=c/256; g%=256; b=c%256; } else { r=204; g=204; b=204; } r+=w; if(r>255) r=255; if(r<0) r=0; g+=w; if(g>255) g=255; if(g<0) g=0; b+=w; if(b>255) b=255; if(b<0) b=0; gr.setColor(new Color(r,g,b)); gr.drawRect((x0*32+x1)*4+i, y*4+j, 1, 1); } } f>>=1; } } } public void paint(Graphics g) { int x,y, i,j, r,G,b, c,w; g.clearRect(0,0,384,280); for(i=0;i<7;i++) dsp_b(i,(Bs[i])?1:0); dsp_b(7,0); dsp_b(8,0); dsp_wm(Ws,(Bs[6])?false:true); } public boolean mouseDown(Event e, int mx, int my) { int i,n=0; boolean c=false; for(i=1;i<6;i++) if(Bs[i]) n=i; for(i=1;i<6;i++) Bs[i]=false; if(my>297) { if(inside(mx, 77,103)) {Bs[0]=true; Bs[6]=false; Bs[n]=true; c=true;} if(inside(mx,119,145)) {Ws=0; Bs[1]=true; c=true;} if(inside(mx,149,175)) {Ws=1; Bs[2]=true; c=true;} if(inside(mx,179,205)) {Ws=2; Bs[3]=true; c=true;} if(inside(mx,209,235)) {Ws=4; Bs[4]=true; c=true;} if(inside(mx,239,265)) {Ws=8; Bs[5]=true; c=true;} if(inside(mx,281,307)) {Bs[0]=false; Bs[6]=true; Bs[n]=true; c=true;} } if(c) repaint(); return true; } } //戻る