@@ -302,7 +302,37 @@ def test_copy(self):
302302 image2 = image .copy ()
303303 self .assertEqual (image2 .width (), 16 )
304304 self .assertEqual (image2 .height (), 16 )
305- self .assertEqual (image .get (4 , 6 ), image .get (4 , 6 ))
305+ self .assertEqual (image2 .get (4 , 6 ), image .get (4 , 6 ))
306+
307+ image2 = image .copy (from_coords = (2 , 3 , 14 , 11 ))
308+ self .assertEqual (image2 .width (), 12 )
309+ self .assertEqual (image2 .height (), 8 )
310+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
311+ self .assertEqual (image2 .get (11 , 7 ), image .get (13 , 10 ))
312+ self .assertEqual (image2 .get (2 , 4 ), image .get (2 + 2 , 4 + 3 ))
313+
314+ image2 = image .copy (from_coords = (2 , 3 , 14 , 11 ), zoom = 2 )
315+ self .assertEqual (image2 .width (), 24 )
316+ self .assertEqual (image2 .height (), 16 )
317+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
318+ self .assertEqual (image2 .get (23 , 15 ), image .get (13 , 10 ))
319+ self .assertEqual (image2 .get (2 * 2 , 4 * 2 ), image .get (2 + 2 , 4 + 3 ))
320+ self .assertEqual (image2 .get (2 * 2 + 1 , 4 * 2 + 1 ), image .get (6 + 2 , 2 + 3 ))
321+
322+ image2 = image .copy (from_coords = (2 , 3 , 14 , 11 ), subsample = 2 )
323+ self .assertEqual (image2 .width (), 6 )
324+ self .assertEqual (image2 .height (), 4 )
325+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
326+ self .assertEqual (image2 .get (5 , 3 ), image .get (12 , 9 ))
327+ self .assertEqual (image2 .get (3 , 2 ), image .get (3 * 2 + 2 , 2 * 2 + 3 ))
328+
329+ image2 = image .copy (from_coords = (2 , 3 , 14 , 11 ), subsample = 2 , zoom = 3 )
330+ self .assertEqual (image2 .width (), 18 )
331+ self .assertEqual (image2 .height (), 12 )
332+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
333+ self .assertEqual (image2 .get (17 , 11 ), image .get (12 , 9 ))
334+ self .assertEqual (image2 .get (1 * 3 , 2 * 3 ), image .get (1 * 2 + 2 , 2 * 2 + 3 ))
335+ self .assertEqual (image2 .get (1 * 3 + 2 , 2 * 3 + 2 ), image .get (1 * 2 + 2 , 2 * 2 + 3 ))
306336
307337 def test_subsample (self ):
308338 image = self .create ()
@@ -316,6 +346,13 @@ def test_subsample(self):
316346 self .assertEqual (image2 .height (), 8 )
317347 self .assertEqual (image2 .get (2 , 3 ), image .get (4 , 6 ))
318348
349+ image2 = image .subsample (2 , from_coords = (2 , 3 , 14 , 11 ))
350+ self .assertEqual (image2 .width (), 6 )
351+ self .assertEqual (image2 .height (), 4 )
352+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
353+ self .assertEqual (image2 .get (5 , 3 ), image .get (12 , 9 ))
354+ self .assertEqual (image2 .get (1 , 2 ), image .get (1 * 2 + 2 , 2 * 2 + 3 ))
355+
319356 def test_zoom (self ):
320357 image = self .create ()
321358 image2 = image .zoom (2 , 3 )
@@ -330,6 +367,118 @@ def test_zoom(self):
330367 self .assertEqual (image2 .get (8 , 12 ), image .get (4 , 6 ))
331368 self .assertEqual (image2 .get (9 , 13 ), image .get (4 , 6 ))
332369
370+ image2 = image .zoom (2 , from_coords = (2 , 3 , 14 , 11 ))
371+ self .assertEqual (image2 .width (), 24 )
372+ self .assertEqual (image2 .height (), 16 )
373+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
374+ self .assertEqual (image2 .get (23 , 15 ), image .get (13 , 10 ))
375+ self .assertEqual (image2 .get (2 * 2 , 4 * 2 ), image .get (2 + 2 , 4 + 3 ))
376+ self .assertEqual (image2 .get (2 * 2 + 1 , 4 * 2 + 1 ), image .get (6 + 2 , 2 + 3 ))
377+
378+ def test_copy_replace (self ):
379+ image = self .create ()
380+ image2 = tkinter .PhotoImage (master = self .root )
381+ image2 .copy_replace (image )
382+ self .assertEqual (image2 .width (), 16 )
383+ self .assertEqual (image2 .height (), 16 )
384+ self .assertEqual (image2 .get (4 , 6 ), image .get (4 , 6 ))
385+
386+ image2 = tkinter .PhotoImage (master = self .root )
387+ image2 .copy_replace (image , from_coords = (2 , 3 , 14 , 11 ))
388+ self .assertEqual (image2 .width (), 12 )
389+ self .assertEqual (image2 .height (), 8 )
390+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
391+ self .assertEqual (image2 .get (11 , 7 ), image .get (13 , 10 ))
392+ self .assertEqual (image2 .get (2 , 4 ), image .get (2 + 2 , 4 + 3 ))
393+
394+ image2 = tkinter .PhotoImage (master = self .root )
395+ image2 .copy_replace (image )
396+ image2 .copy_replace (image , from_coords = (2 , 3 , 14 , 11 ), shrink = True )
397+ self .assertEqual (image2 .width (), 12 )
398+ self .assertEqual (image2 .height (), 8 )
399+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
400+ self .assertEqual (image2 .get (11 , 7 ), image .get (13 , 10 ))
401+ self .assertEqual (image2 .get (2 , 4 ), image .get (2 + 2 , 4 + 3 ))
402+
403+ image2 = tkinter .PhotoImage (master = self .root )
404+ image2 .copy_replace (image , from_coords = (2 , 3 , 14 , 11 ), to = (3 , 6 ))
405+ self .assertEqual (image2 .width (), 15 )
406+ self .assertEqual (image2 .height (), 14 )
407+ self .assertEqual (image2 .get (0 + 3 , 0 + 6 ), image .get (2 , 3 ))
408+ self .assertEqual (image2 .get (11 + 3 , 7 + 6 ), image .get (13 , 10 ))
409+ self .assertEqual (image2 .get (2 + 3 , 4 + 6 ), image .get (2 + 2 , 4 + 3 ))
410+
411+ image2 = tkinter .PhotoImage (master = self .root )
412+ image2 .copy_replace (image , from_coords = (2 , 3 , 14 , 11 ), to = (0 , 0 , 100 , 50 ))
413+ self .assertEqual (image2 .width (), 100 )
414+ self .assertEqual (image2 .height (), 50 )
415+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
416+ self .assertEqual (image2 .get (11 , 7 ), image .get (13 , 10 ))
417+ self .assertEqual (image2 .get (2 , 4 ), image .get (2 + 2 , 4 + 3 ))
418+ self .assertEqual (image2 .get (2 + 12 , 4 + 8 ), image .get (2 + 2 , 4 + 3 ))
419+ self .assertEqual (image2 .get (2 + 12 * 2 , 4 ), image .get (2 + 2 , 4 + 3 ))
420+ self .assertEqual (image2 .get (2 , 4 + 8 * 3 ), image .get (2 + 2 , 4 + 3 ))
421+
422+ image2 = tkinter .PhotoImage (master = self .root )
423+ image2 .copy_replace (image , from_coords = (2 , 3 , 14 , 11 ), zoom = 2 )
424+ self .assertEqual (image2 .width (), 24 )
425+ self .assertEqual (image2 .height (), 16 )
426+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
427+ self .assertEqual (image2 .get (23 , 15 ), image .get (13 , 10 ))
428+ self .assertEqual (image2 .get (2 * 2 , 4 * 2 ), image .get (2 + 2 , 4 + 3 ))
429+ self .assertEqual (image2 .get (2 * 2 + 1 , 4 * 2 + 1 ), image .get (6 + 2 , 2 + 3 ))
430+
431+ image2 = tkinter .PhotoImage (master = self .root )
432+ image2 .copy_replace (image , from_coords = (2 , 3 , 14 , 11 ), subsample = 2 )
433+ self .assertEqual (image2 .width (), 6 )
434+ self .assertEqual (image2 .height (), 4 )
435+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
436+ self .assertEqual (image2 .get (5 , 3 ), image .get (12 , 9 ))
437+ self .assertEqual (image2 .get (1 , 2 ), image .get (1 * 2 + 2 , 2 * 2 + 3 ))
438+
439+ image2 = tkinter .PhotoImage (master = self .root )
440+ image2 .copy_replace (image , from_coords = (2 , 3 , 14 , 11 ), subsample = 2 , zoom = 3 )
441+ self .assertEqual (image2 .width (), 18 )
442+ self .assertEqual (image2 .height (), 12 )
443+ self .assertEqual (image2 .get (0 , 0 ), image .get (2 , 3 ))
444+ self .assertEqual (image2 .get (17 , 11 ), image .get (12 , 9 ))
445+ self .assertEqual (image2 .get (3 * 3 , 2 * 3 ), image .get (3 * 2 + 2 , 2 * 2 + 3 ))
446+ self .assertEqual (image2 .get (3 * 3 + 2 , 2 * 3 + 2 ), image .get (3 * 2 + 2 , 2 * 2 + 3 ))
447+ self .assertEqual (image2 .get (1 * 3 , 2 * 3 ), image .get (1 * 2 + 2 , 2 * 2 + 3 ))
448+ self .assertEqual (image2 .get (1 * 3 + 2 , 2 * 3 + 2 ), image .get (1 * 2 + 2 , 2 * 2 + 3 ))
449+
450+ def checkImgTrans (self , image , expected ):
451+ actual = {(x , y )
452+ for x in range (image .width ())
453+ for y in range (image .height ())
454+ if image .transparency_get (x , y )}
455+ self .assertEqual (actual , expected )
456+
457+ def test_copy_replace_compositingrule (self ):
458+ image1 = tkinter .PhotoImage (master = self .root , width = 2 , height = 2 )
459+ image1 .blank ()
460+ image1 .put ('black' , to = (0 , 0 , 2 , 2 ))
461+ image1 .transparency_set (0 , 0 , True )
462+
463+ # default compositingrule
464+ image2 = tkinter .PhotoImage (master = self .root , width = 3 , height = 3 )
465+ image2 .blank ()
466+ image2 .put ('white' , to = (0 , 0 , 2 , 2 ))
467+ image2 .copy_replace (image1 , to = (1 , 1 ))
468+ self .checkImgTrans (image2 , {(0 , 2 ), (2 , 0 )})
469+
470+ image3 = tkinter .PhotoImage (master = self .root , width = 3 , height = 3 )
471+ image3 .blank ()
472+ image3 .put ('white' , to = (0 , 0 , 2 , 2 ))
473+ image3 .copy_replace (image1 , to = (1 , 1 ), compositingrule = 'overlay' )
474+ self .checkImgTrans (image3 , {(0 , 2 ), (2 , 0 )})
475+
476+ image4 = tkinter .PhotoImage (master = self .root , width = 3 , height = 3 )
477+ image4 .blank ()
478+ image4 .put ('white' , to = (0 , 0 , 2 , 2 ))
479+ image4 .copy_replace (image1 , to = (1 , 1 ), compositingrule = 'set' )
480+ self .checkImgTrans (image4 , {(0 , 2 ), (1 , 1 ), (2 , 0 )})
481+
333482 def test_put (self ):
334483 image = self .create ()
335484 image .put ('{red green} {blue yellow}' , to = (4 , 6 ))
0 commit comments