小编Sid*_*ina的帖子

在Scala中编写功能强大但功能强大的图像处理库

我们正在为Scala(学生项目)开发一个小型图像处理库.该库完全正常(即没有可变性).存储图像的光栅Stream[Stream[Int]]以便以最少的努力利用惰性评估的益处.但是,在对映像执行一些操作时,堆会变满并OutOfMemoryError抛出一个.(例如,在JVM堆耗尽空间之前,最多可以对大小为500 x 400的jpeg映像执行4次操作,35 kb.)

我们想到的方法是:

  • 扭曲JVM选项并增加堆大小.(我们不知道如何在IDEA下执行此操作 - 我们正在使用的IDE.)
  • 选择不同的数据结构Stream[Stream[Int]],更适合图像处理的任务.(同样,我们对简单List和以外的功能数据结构没有太多了解Stream.)

我们的最后一个选择是放弃不变性并使其成为一个可变的库(如流行的图像处理库),我们并不是真的想做.如果你知道我的意思,请建议我们一些方法来保持这个库的功能和功能.

谢谢,
Siddharth Raina.

ADDENDUM:
对于大小为1024 x 768的映像,即使对于单个映射操作,JVM也会耗尽堆空间.我们测试的一些示例代码:

val image = Image from "E:/metallica.jpg"
val redded = image.map(_ & 0xff0000)
redded.display(title = "Redded")
Run Code Online (Sandbox Code Playgroud)

并输出:

"C:\Program Files (x86)\Java\jdk1.6.0_02\bin\java" -Didea.launcher.port=7533 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 10.0.2\bin" -Dfile.encoding=windows-1252 -classpath "C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\rt.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.6.0_02\jre\lib\ext\localedata.jar;C:\Program Files …
Run Code Online (Sandbox Code Playgroud)

programming-languages functional-programming scala image-processing

19
推荐指数
7
解决办法
5123
查看次数

使用静态键入别名Java类

假设MyClass是一个用Java定义的类,并且有许多静态成员和非静态成员.我试图在Scala对象中MyObject为此类(和关联的伴随对象)设置别名,如下所示:

object MyObject {
  import javastuff._
  type MyAlias = MyClass
  val MyAlias = MyClass
}
Run Code Online (Sandbox Code Playgroud)

Scalac抱怨道:

error: object MyClass is not a value
val MyAlias = MyClass
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?谢谢.

scala

7
推荐指数
1
解决办法
716
查看次数

编写2D数组的迭代器

我正在尝试为2D数组编写迭代器.以下是我的想法.

  def rowsTest() {
    val array = Array(
      Array(9, 11, 4, 89),
      Array(7, 62, 34, 2),
      Array(3, 4, 5, 12),
      Array(13, 4, 5, 12),
      Array(3, 24, 5, 12),
      Array(3, 4, 35, 12)
    )
    def rows: Iterator[Iterator[Int]] = {
      new Iterator[Iterator[Int]] {
        private var rowIndex = 0

        def hasNext: Boolean = rowIndex < 6

        def next: Iterator[Int] = {
          val rowIterator = new Iterator[Int] {
            private var columnIndex = 0

            def next: Int = {
              val p = array(columnIndex)(rowIndex)
              columnIndex += …
Run Code Online (Sandbox Code Playgroud)

arrays iterator scala

3
推荐指数
1
解决办法
2039
查看次数