diff --git a/src/com/bytezone/diskbrowser/applefile/HiResImage.java b/src/com/bytezone/diskbrowser/applefile/HiResImage.java index 4f9031e..e3f0698 100644 --- a/src/com/bytezone/diskbrowser/applefile/HiResImage.java +++ b/src/com/bytezone/diskbrowser/applefile/HiResImage.java @@ -1,6 +1,7 @@ package com.bytezone.diskbrowser.applefile; import java.awt.Color; +import java.awt.image.DataBuffer; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.List; @@ -254,6 +255,16 @@ public abstract class HiResImage extends AbstractFile return text.toString (); } + // ---------------------------------------------------------------------------------// + int draw (DataBuffer dataBuffer, int element, int... rgb1) + // ---------------------------------------------------------------------------------// + { + for (int i = 0; i < rgb1.length; i++) + dataBuffer.setElem (element++, rgb1[i]); + + return element; + } + /* * Unpack the Apple PackBytes format. * diff --git a/src/com/bytezone/diskbrowser/applefile/SHRPictureFile1.java b/src/com/bytezone/diskbrowser/applefile/SHRPictureFile1.java index a6eb559..5c14b93 100644 --- a/src/com/bytezone/diskbrowser/applefile/SHRPictureFile1.java +++ b/src/com/bytezone/diskbrowser/applefile/SHRPictureFile1.java @@ -128,11 +128,26 @@ public class SHRPictureFile1 extends HiResImage // boolean fillMode = (lo & 0x20) != 0; // if (fillMode) // System.out.println ("fillmode " + fillMode); + boolean mode320 = (mainBlock.masterMode & 0x80) == 0; + int max = mainBlock.unpackedSize[line]; - // 640 mode - if (mainBlock.masterMode == 0x80) + if (mode320) + { + for (int i = 0; i < max; i++) // two pixels per col + { + int left = (buffer[ptr] & 0xF0) >> 4; + int right = buffer[ptr++] & 0x0F; + + // get left/right colors + int rgbLeft = colorTable.entries[left].color.getRGB (); + int rgbRight = colorTable.entries[right].color.getRGB (); + + element1 = draw (dataBuffer, element1, rgbLeft, rgbLeft, rgbRight, rgbRight); + element2 = draw (dataBuffer, element2, rgbLeft, rgbLeft, rgbRight, rgbRight); + } + } + else { - int max = mainBlock.unpackedSize[line]; for (int i = 0; i < max; i++) // four pixels per col { int p1 = (buffer[ptr] & 0xC0) >> 6; @@ -146,48 +161,12 @@ public class SHRPictureFile1 extends HiResImage int rgb3 = colorTable.entries[p3].color.getRGB (); int rgb4 = colorTable.entries[p4 + 4].color.getRGB (); - // draw pixels on current line - dataBuffer.setElem (element1++, rgb1); - dataBuffer.setElem (element1++, rgb2); - dataBuffer.setElem (element1++, rgb3); - dataBuffer.setElem (element1++, rgb4); - - // draw same pixels on next line - dataBuffer.setElem (element2++, rgb1); - dataBuffer.setElem (element2++, rgb2); - dataBuffer.setElem (element2++, rgb3); - dataBuffer.setElem (element2++, rgb4); + element1 = draw (dataBuffer, element1, rgb1, rgb2, rgb3, rgb4); + element2 = draw (dataBuffer, element2, rgb1, rgb2, rgb3, rgb4); } - element1 += width; // skip line already drawn - element2 += width; // one line ahead - } - else - { - int max = mainBlock.unpackedSize[line]; - for (int i = 0; i < max; i++) // two pixels per col - { - int left = (buffer[ptr] & 0xF0) >> 4; - int right = buffer[ptr++] & 0x0F; - - // get left/right colors - int rgbLeft = colorTable.entries[left].color.getRGB (); - int rgbRight = colorTable.entries[right].color.getRGB (); - - // draw left/right pixels on current line - dataBuffer.setElem (element1++, rgbLeft); - dataBuffer.setElem (element1++, rgbLeft); - dataBuffer.setElem (element1++, rgbRight); - dataBuffer.setElem (element1++, rgbRight); - - // draw same left/right pixels on next line - dataBuffer.setElem (element2++, rgbLeft); - dataBuffer.setElem (element2++, rgbLeft); - dataBuffer.setElem (element2++, rgbRight); - dataBuffer.setElem (element2++, rgbRight); - } - element1 += width; // skip line already drawn - element2 += width; // one line ahead } + element1 += width; // skip line already drawn + element2 += width; // one line ahead } } diff --git a/src/com/bytezone/diskbrowser/applefile/SHRPictureFile2.java b/src/com/bytezone/diskbrowser/applefile/SHRPictureFile2.java index d35e654..122b0bf 100644 --- a/src/com/bytezone/diskbrowser/applefile/SHRPictureFile2.java +++ b/src/com/bytezone/diskbrowser/applefile/SHRPictureFile2.java @@ -229,17 +229,8 @@ public class SHRPictureFile2 extends HiResImage int rgbLeft = colorTable.entries[left].color.getRGB (); int rgbRight = colorTable.entries[right].color.getRGB (); - // draw left/right pixels on current line - dataBuffer.setElem (element1++, rgbLeft); - dataBuffer.setElem (element1++, rgbLeft); - dataBuffer.setElem (element1++, rgbRight); - dataBuffer.setElem (element1++, rgbRight); - - // draw same left/right pixels on next line - dataBuffer.setElem (element2++, rgbLeft); - dataBuffer.setElem (element2++, rgbLeft); - dataBuffer.setElem (element2++, rgbRight); - dataBuffer.setElem (element2++, rgbRight); + element1 = draw (dataBuffer, element1, rgbLeft, rgbLeft, rgbRight, rgbRight); + element2 = draw (dataBuffer, element2, rgbLeft, rgbLeft, rgbRight, rgbRight); } element1 += 640; // skip line already drawn element2 += 640; // one line ahead @@ -259,17 +250,8 @@ public class SHRPictureFile2 extends HiResImage int rgb3 = colorTable.entries[p3].color.getRGB (); int rgb4 = colorTable.entries[p4 + 4].color.getRGB (); - // draw pixels on current line - dataBuffer.setElem (element1++, rgb1); - dataBuffer.setElem (element1++, rgb2); - dataBuffer.setElem (element1++, rgb3); - dataBuffer.setElem (element1++, rgb4); - - // draw same pixels on next line - dataBuffer.setElem (element2++, rgb1); - dataBuffer.setElem (element2++, rgb2); - dataBuffer.setElem (element2++, rgb3); - dataBuffer.setElem (element2++, rgb4); + element1 = draw (dataBuffer, element1, rgb1, rgb2, rgb3, rgb4); + element2 = draw (dataBuffer, element2, rgb1, rgb2, rgb3, rgb4); } element1 += 640; // skip line already drawn element2 += 640; // one line ahead