<AWT Dev> RFR: 8212226 SurfaceManager throws "Invalid Image variant" for MultiResolutionImage (Windows)

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Tue Aug 4 06:08:36 UTC 2020


Looks fine.

On 31.07.2020 11:08, Alexander Zuev wrote:
> I slightly fixed the test and added it to the fix. New webrev is here:
> http://cr.openjdk.java.net/~kizune/8212226/webrev.03/
> 
> On 7/29/2020 1:11 AM, Sergey Bylokhov wrote:
>> On 27.07.2020 23:43, Alexander Zuev wrote:
>>>    As for the test i have a manual test that i use to reproduce the situation but i am not sure i can make
>>> the automated test case - the configuration required is quite unique. I tried to play with the setting
>>> that manages the magnification factor but changing it does not trigger the bug.
>>
>> I guess something like this should work:
>>
>> import java.awt.Color;
>> import java.awt.Graphics;
>> import java.awt.Graphics2D;
>> import java.awt.Image;
>> import java.awt.image.BaseMultiResolutionImage;
>> import java.awt.image.BufferedImage;
>> import java.awt.image.ImageObserver;
>> import java.awt.image.ImageProducer;
>>
>> import static java.awt.image.BufferedImage.TYPE_INT_RGB;
>>
>> public final class SkipRequestedImageVariant {
>>
>>     public static void main(String[] args) {
>>         var mri = new BaseMultiResolutionImage(1,
>> generateFakeImage(),
>>                                                generateImage(200, Color.GREEN),
>> generateFakeImage());
>>
>>         BufferedImage target = new BufferedImage(500, 500, TYPE_INT_RGB);
>>         Graphics2D g2d = target.createGraphics();
>>         g2d.drawImage(mri, 0, 0, 500, 500, null);
>>         g2d.dispose();
>>         if (Color.GREEN.getRGB() != target.getRGB(1, 1)) {
>>             throw new RuntimeException("Wrong resolution variant was used");
>>         }
>>     }
>>
>>     private static BufferedImage generateImage(int size, Color c) {
>>         BufferedImage img = new BufferedImage(size, size, TYPE_INT_RGB);
>>         Graphics g = img.createGraphics();
>>         g.setColor(c);
>>         g.fillRect(0, 0, size, size);
>>         g.dispose();
>>         return img;
>>     }
>>
>>     private static Image generateFakeImage() {
>>         return new Image(){
>>             @Override
>>             public int getWidth(ImageObserver observer) {
>>                 return -1;
>>             }
>>
>>             @Override
>>             public int getHeight(ImageObserver observer) {
>>                 return -1;
>>             }
>>
>>             @Override
>>             public ImageProducer getSource() {
>>                 return null;
>>             }
>>
>>             @Override
>>             public Graphics getGraphics() {
>>                 return null;
>>             }
>>
>>             @Override
>>             public Object getProperty(String name, ImageObserver observer) {
>>                 return null;
>>             }
>>         };
>>     }
>> }
> 


-- 
Best regards, Sergey.


More information about the awt-dev mailing list