Piksel, Excel, Kotlin dan sedikit nostalgia ...

Halo semuanya! Ide untuk artikel ini datang sebulan yang lalu, tetapi karena kesibukan di tempat kerja, waktu sangat kurang. Suatu malam di YouTube saya menemukan video tentang membuat game platform seni piksel. Dan kemudian saya teringat pelajaran ilmu komputer pertama saya di sekolah, di mana kami "menggambar BASIC" dan memainkan "huruf makan gagak".





Kata pengantar

Saat itu tahun 2000. Krisis 98 telah berakhir. Saya duduk di kelas 8 di sekolah lokal di kota kecil. Di awal tahun ajaran, sebuah acara kecil menanti semua orang - pelajaran ilmu komputer diperkenalkan. Banyak yang menganggap ini sebagai mata pelajaran lain yang perlu diajarkan, tetapi ada juga yang matanya berbinar. Saya termasuk yang terakhir.





Perlu dicatat bahwa meskipun ilmu komputer diperkenalkan, mereka lupa "memperkenalkan komputer baru" karena tidak ada uang untuk tujuan ini. Pada saat itu, sekolah kami dilayani oleh mesin yang dibuat di Uni Soviet - " Electronics MC 0511 " dan beberapa mesin yang sedikit lebih modern. Mereka bekerja hanya menurut hukum mereka sendiri, atau setelah kedatangan "Nikolai Vladimirovich" tertentu - seorang guru lokal.





foto dari situs - red-innovations.su
foto dari situs - red-innovations.su

"" - 26 , . . . , . , .





, , . - , , .





BufferedImage. , .





fun drawPixel(
    x:Int, y:Int, red:Int, green:Int, blue: Int,
    image: BufferedImage
) {
    image.setRGB(x, y, Color(red,green,blue).rgb)
}
      
      



, . , - redRng, greenRng blueRng .





fun drawRandImage( 
    image: BufferedImage, stepSize: Int = 1,  
    redRng: Int = 255, greenRng: Int = 255, blueRng: Int = 255
) { 
    for(posX in 0 until image.width step stepSize){ 
        for (posY in 0 until image.height step stepSize) {
            val r = if (redRng <= 0) 0 else Random.nextInt(0, redRng) 
            val g = if (greenRng <= 0) 0 else Random.nextInt(0, greenRng)
            val b = if (blueRng <= 0) 0 else Random.nextInt(0, blueRng) 
            drawPixel(posX, posY, r, g, b, image) 
        }  
    }
}
      
      



stepSize , .





gambar acak 1.) langkah 3, RGB (11, 238, 229) 2.) langkah 2, RGB (181, 19, 227)
1.) step 3, RGB (11, 238, 229) 2.) step 2, RGB (181, 19, 227)

- . . ImageIO. - , Thread.





fun writeImage(img: BufferedImage, file: String) {
    val imgthread = Thread(Runnable {
        ImageIO.write(img, File(file).extension, File(file))
    })
    try {
        imgthread.start()
    } catch (ex: Exception) {
        ex.printStackTrace()
        imgthread.interrupt()
    }
}
      
      



, "" .





ArrayList<List<Int>>. "" drawTitle, "" drawPixel, "big pixel" .





fun drawTile(
    startX: Int, startY: Int, size: Int, 
    red: Int, green: Int, blue: Int, image: BufferedImage
) {
    for (posX in startX until startX+size) {
        for (posY in startY until startY+size) {
            drawPixel(posX,posY,red,green,blue,image)
        }
    }
}
      
      



. -. when 4 …





fun drawImage(pixels: ArrayList<List<Int>>, image: BufferedImage) {
    pixels.forEachIndexed { posY, row ->
        row.forEachIndexed { posX, col ->
            when(col) {
                1 -> drawTile(posX*10,posY*10,10,255,2,0,image)
                2 -> drawTile(posX*10,posY*10,10,156,25,31,image)
                3 -> drawTile(posX*10,posY*10,10,255,255,255,image)
                else -> drawTile(posX*10,posY*10,10,23,0,44,image)
            }
        }
    }
}
      
      



… , (1 = , 2 = -, 3 = , 4 = )





val map = arrayListOf(
    listOf(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    listOf(0,0,0,1,1,1,0,0,0,1,2,2,0,0,0),
    listOf(0,0,1,3,3,1,1,0,1,1,1,2,2,0,0),
    listOf(0,1,3,3,1,1,1,1,1,1,1,1,2,2,0),
    listOf(0,1,3,1,1,1,1,1,1,1,1,1,2,2,0),
    listOf(0,1,1,1,1,1,1,1,1,1,1,1,2,2,0),
    listOf(0,1,1,1,1,1,1,1,1,1,1,1,2,2,0),
    listOf(0,0,1,1,1,1,1,1,1,1,1,2,2,0,0),
    listOf(0,0,0,1,1,1,1,1,1,1,2,2,0,0,0),
    listOf(0,0,0,0,1,1,1,1,1,2,2,0,0,0,0),
    listOf(0,0,0,0,0,1,1,1,2,2,0,0,0,0,0),
    listOf(0,0,0,0,0,0,1,2,2,0,0,0,0,0,0),
    listOf(0,0,0,0,0,0,0,2,0,0,0,0,0,0,0),
    listOf(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
)
      
      



... . "" .





hati pixel
pixel heart

, " " , - , . , , .





Excel

. JS (React JS), , JavaScript . - …





, Excel. - . . " " - , Apache POI - word, excel, pdf. , .





hex rgba, Color.





val toRGBA = { hex: String ->
    val red = hex.toLong(16) and 0xff0000 shr 16
    val green = hex.toLong(16) and 0xff00 shr 8
    val blue = hex.toLong(16) and 0xff
    val alpha = hex.toLong(16) and 0xff000000 shr 24
    Color(red.toInt(),green.toInt(),blue.toInt(),alpha.toInt())
}
      
      



, .





fun getPixelColors(file: String, listName: String): ArrayList<List<String>> {
    val table = FileInputStream(file)
    val sheet = WorkbookFactory.create(table).getSheet(listName)

    val rowIterator: Iterator<Row> = sheet.iterator()
    val rowArray: ArrayList<Int> = ArrayList()
    val cellArray: ArrayList<Int> = ArrayList()

    while (rowIterator.hasNext()) {
        val row: Row = rowIterator.next()
        rowArray.add(row.rowNum)
        val cellIterator = row.cellIterator()

        while (cellIterator.hasNext()) {
            val cell = cellIterator.next()
            cellArray.add(cell.address.column)
        }
    }
    val rowSize = rowArray.maxOf { el->el }
    //...   
    //...  
    return pixelMatrix
}
      
      



( ). , , . .





, , . ...





val rows = sheet.lastRowNum
val cells = sheet.getRow(rows).lastCellNum // + rows

val pixArray = Array(rows+1) {Array(ccc+1) {""} }
      
      



... OutOfBounds. (row) , , . , "", . iterator.hasNext(), .





Editor piksel di Excel
Excel

- " " BufferedImage. , - TYPE_INT_ARGB, .





fun renderImage(pixels: ArrayList<List<String>>): BufferedImage {
    val resultImage = BufferedImage(
        pixels[0].size*10,
        pixels.size*10,
        BufferedImage.TYPE_INT_ARGB
    )
    pixels.forEachIndexed { posY, row ->
        row.forEachIndexed { posX, col ->
            drawTile(
                (posX)*10,(posY)*10, 10,
                toRGBA(col).red, toRGBA(col).green,toRGBA(col).blue,
                toRGBA(col).alpha, resultImage
            )
        }
    }
    return resultImage
}
      
      



, .





gambar yang diberikan di Excel.  berdasarkan karya Mockingjay1701
Excel. Mockingjay1701

github. ? svg, (blur, glitch, glow, etc..), “ ” , xls (HSSF Color) . - , , - .





, " " (ctrl+c, ctrl+v), "" . , : , , - " ". , , , .





14 , , .





Bahkan jika dalam beberapa tahun "MS Electronics" digantikan oleh rekan-rekan berbasis Pentium modern, pelajaran pertama di komputer lama itu akan selamanya tetap ada pada saya, karena merekalah yang menaruh kecintaan saya pada komputer dan semua yang terhubung dengannya ke dalam diri saya. ..





Bagaimana ilmu komputer dimulai di sekolah Anda?





Terimakasih untuk semua! Selamat tinggal semuanya!








All Articles